/**
 * Cesium - https://github.com/AnalyticalGraphicsInc/cesium
 *
 * Copyright 2011-2017 Cesium Contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Columbus View (Pat. Pend.)
 *
 * Portions licensed separately.
 * See https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md for full licensing details.
 */
/**
@license
mersenne-twister.js - https://gist.github.com/banksean/300494

   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
   All rights reserved.

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:

     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

     3. The names of its contributors may not be used to endorse or promote
        products derived from this software without specific prior written
        permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**
  @license
  when.js - https://github.com/cujojs/when

  MIT License (c) copyright B Cavalier & J Hann

 * A lightweight CommonJS Promises/A and when() implementation
 * when is part of the cujo.js family of libraries (http://cujojs.com/)
 *
 * Licensed under the MIT License at:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * @version 1.7.1
 */

/**
@license
sprintf.js from the php.js project - https://github.com/kvz/phpjs
Directly from https://github.com/kvz/phpjs/blob/master/functions/strings/sprintf.js

php.js is copyright 2012 Kevin van Zonneveld.

Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
(http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White
(http://getsprink.com), Waldo Malqui Silva, Paulo Freitas, Jack, Jonas
Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Legaev
Andrey, Ates Goral (http://magnetiq.com), Alex, Ratheous, Martijn Wieringa,
Rafa? Kukawski (http://blog.kukawski.pl), lmeyrick
(https://sourceforge.net/projects/bcmath-js/), Nate, Philippe Baumann,
Enrique Gonzalez, Webtoolkit.info (http://www.webtoolkit.info/), Carlos R.
L. Rodrigues (http://www.jsfromhell.com), Ash Searle
(http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek,
Erkekjetter, Michael Grier, Rafa? Kukawski (http://kukawski.pl), Johnny
Mast (http://www.phpvrouwen.nl), T.Wild, d3x,
http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
Rafa? Kukawski (http://blog.kukawski.pl/), stag019, pilus, WebDevHobo
(http://webdevhobo.blogspot.com/), marrtins, GeekFG
(http://geekfg.blogspot.com), Andrea Giammarchi
(http://webreflection.blogspot.com), Arpad Ray (mailto:arpad@php.net),
gorthaur, Paul Smith, Tim de Koning (http://www.kingsquare.nl), Joris, Oleg
Eremeev, Steve Hilder, majak, gettimeofday, KELAN, Josh Fraser
(http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
Marc Palau, Martin
(http://www.erlenwiese.de/), Breaking Par Consulting Inc
(http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
Chris, Mirek Slugen, saulius, Alfonso Jimenez
(http://www.alfonsojimenez.com), Diplom@t (http://difane.com/), felix,
Mailfaker (http://www.weedem.fr/), Tyler Akins (http://rumkin.com), Caio
Ariede (http://caioariede.com), Robin, Kankrelune
(http://www.webfaktory.info/), Karol Kowalski, Imgen Tata
(http://www.myipdf.com/), mdsjack (http://www.mdsjack.bo.it), Dreamer,
Felix Geisendoerfer (http://www.debuggable.com/felix), Lars Fischer, AJ,
David, Aman Gupta, Michael White, Public Domain
(http://www.json.org/json2.js), Steven Levithan
(http://blog.stevenlevithan.com), Sakimori, Pellentesque Malesuada,
Thunder.m, Dj (http://phpjs.org/functions/htmlentities:425#comment_134018),
Steve Clay, David James, Francois, class_exists, nobbler, T. Wild, Itsacon
(http://www.itsacon.net/), date, Ole Vrijenhoek (http://www.nervous.nl/),
Fox, Raphael (Ao RUDLER), Marco, noname, Mateusz "loonquawl" Zalega, Frank
Forte, Arno, ger, mktime, john (http://www.jd-tech.net), Nick Kolosov
(http://sammy.ru), marc andreu, Scott Cariss, Douglas Crockford
(http://javascript.crockford.com), madipta, Slawomir Kaniecki,
ReverseSyntax, Nathan, Alex Wilson, kenneth, Bayron Guevara, Adam Wallner
(http://web2.bitbaro.hu/), paulo kuong, jmweb, Lincoln Ramsay, djmix,
Pyerre, Jon Hohle, Thiago Mata (http://thiagomata.blog.com), lmeyrick
(https://sourceforge.net/projects/bcmath-js/this.), Linuxworld, duncan,
Gilbert, Sanjoy Roy, Shingo, sankai, Oskar Larsson H?gfeldt
(http://oskar-lh.name/), Denny Wardhana, 0m3r, Everlasto, Subhasis Deb,
josh, jd, Pier Paolo Ramon (http://www.mastersoup.com/), P, merabi, Soren
Hansen, Eugene Bulkin (http://doubleaw.com/), Der Simon
(http://innerdom.sourceforge.net/), echo is bad, Ozh, XoraX
(http://www.xorax.info), EdorFaus, JB, J A R, Marc Jansen, Francesco, LH,
Stoyan Kyosev (http://www.svest.org/), nord_ua, omid
(http://phpjs.org/functions/380:380#comment_137122), Brad Touesnard, MeEtc
(http://yass.meetcweb.com), Peter-Paul Koch
(http://www.quirksmode.org/js/beat.html), Olivier Louvignes
(http://mg-crea.com/), T0bsn, Tim Wiel, Bryan Elliott, Jalal Berrami,
Martin, JT, David Randall, Thomas Beaucourt (http://www.webapp.fr), taith,
vlado houba, Pierre-Luc Paour, Kristof Coomans (SCK-CEN Belgian Nucleair
Research Centre), Martin Pool, Kirk Strobeck, Rick Waldron, Brant Messenger
(http://www.brantmessenger.com/), Devan Penner-Woelk, Saulo Vallory, Wagner
B. Soares, Artur Tchernychev, Valentina De Rosa, Jason Wong
(http://carrot.org/), Christoph, Daniel Esteban, strftime, Mick@el, rezna,
Simon Willison (http://simonwillison.net), Anton Ongson, Gabriel Paderni,
Marco van Oort, penutbutterjelly, Philipp Lenssen, Bjorn Roesbeke
(http://www.bjornroesbeke.be/), Bug?, Eric Nagel, Tomasz Wesolowski,
Evertjan Garretsen, Bobby Drake, Blues (http://tech.bluesmoon.info/), Luke
Godfrey, Pul, uestla, Alan C, Ulrich, Rafal Kukawski, Yves Sucaet,
sowberry, Norman "zEh" Fuchs, hitwork, Zahlii, johnrembo, Nick Callen,
Steven Levithan (stevenlevithan.com), ejsanders, Scott Baker, Brian Tafoya
(http://www.premasolutions.com/), Philippe Jausions
(http://pear.php.net/user/jausions), Aidan Lister
(http://aidanlister.com/), Rob, e-mike, HKM, ChaosNo1, metjay, strcasecmp,
strcmp, Taras Bogach, jpfle, Alexander Ermolaev
(http://snippets.dzone.com/user/AlexanderErmolaev), DxGx, kilops, Orlando,
dptr1988, Le Torbi, James (http://www.james-bell.co.uk/), Pedro Tainha
(http://www.pedrotainha.com), James, Arnout Kazemier
(http://www.3rd-Eden.com), Chris McMacken, gabriel paderni, Yannoo,
FGFEmperor, baris ozdil, Tod Gentille, Greg Frazier, jakes, 3D-GRAF, Allan
Jensen (http://www.winternet.no), Howard Yeend, Benjamin Lupton, davook,
daniel airton wermann (http://wermann.com.br), Atli T¨®r, Maximusya, Ryan
W Tenney (http://ryan.10e.us), Alexander M Beedie, fearphage
(http://http/my.opera.com/fearphage/), Nathan Sepulveda, Victor, Matteo,
Billy, stensi, Cord, Manish, T.J. Leahy, Riddler
(http://www.frontierwebdev.com/), Rafa? Kukawski, FremyCompany, Matt
Bradley, Tim de Koning, Luis Salazar (http://www.freaky-media.com/), Diogo
Resende, Rival, Andrej Pavlovic, Garagoth, Le Torbi
(http://www.letorbi.de/), Dino, Josep Sanz (http://www.ws3.es/), rem,
Russell Walker (http://www.nbill.co.uk/), Jamie Beck
(http://www.terabit.ca/), setcookie, Michael, YUI Library:
http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Blues at
http://hacks.bluesmoon.info/strftime/strftime.js, Ben
(http://benblume.co.uk/), DtTvB
(http://dt.in.th/2008-09-16.string-length-in-bytes.html), Andreas, William,
meo, incidence, Cagri Ekin, Amirouche, Amir Habibi
(http://www.residence-mixte.com/), Luke Smith (http://lucassmith.name),
Kheang Hok Chin (http://www.distantia.ca/), Jay Klehr, Lorenzo Pisani,
Tony, Yen-Wei Liu, Greenseed, mk.keck, Leslie Hoare, dude, booeyOH, Ben
Bryan

Licensed under the MIT (MIT-LICENSE.txt) license.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/

/**
 * @license
 *
 * Grauw URI utilities
 *
 * See: http://hg.grauw.nl/grauw-lib/file/tip/src/uri.js
 *
 * @author Laurens Holst (http://www.grauw.nl/)
 *
 *   Copyright 2012 Laurens Holst
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */

! function() {
  define("Core/defined", [], function() {
      "use strict";

      function e(e) {
        return void 0 !== e && null !== e
      }
      return e
    }), define("Core/DeveloperError", ["./defined"], function(e) {
      "use strict";

      function t(e) {
        this.name = "DeveloperError", this.message = e;
        var t;
        try {
          throw new Error
        } catch (e) {
          t = e.stack
        }
        this.stack = t
      }
      return e(Object.create) && (t.prototype = Object.create(Error.prototype), t.prototype.constructor = t), t
        .prototype.toString = function() {
          var t = this.name + ": " + this.message;
          return e(this.stack) && (t += "\n" + this.stack.toString()), t
        }, t.throwInstantiationError = function() {
          throw new t("This function defines an interface and should not be called directly.")
        }, t
    }), define("Core/Check", ["./defined", "./DeveloperError"], function(e, t) {
      "use strict";

      function r(e) {
        return e + " is required, actual value was undefined"
      }

      function n(e, t, r) {
        return "Expected " + r + " to be typeof " + t + ", actual typeof was " + e
      }
      var a = {};
      return a.typeOf = {}, a.defined = function(n, a) {
        if (!e(a)) throw new t(r(n))
      }, a.typeOf.func = function(e, r) {
        if ("function" != typeof r) throw new t(n(typeof r, "function", e))
      }, a.typeOf.string = function(e, r) {
        if ("string" != typeof r) throw new t(n(typeof r, "string", e))
      }, a.typeOf.number = function(e, r) {
        if ("number" != typeof r) throw new t(n(typeof r, "number", e))
      }, a.typeOf.number.lessThan = function(e, r, n) {
        if (a.typeOf.number(e, r), r >= n) throw new t("Expected " + e + " to be less than " + n +
          ", actual value was " + r)
      }, a.typeOf.number.lessThanOrEquals = function(e, r, n) {
        if (a.typeOf.number(e, r), r > n) throw new t("Expected " + e + " to be less than or equal to " + n +
          ", actual value was " + r)
      }, a.typeOf.number.greaterThan = function(e, r, n) {
        if (a.typeOf.number(e, r), r <= n) throw new t("Expected " + e + " to be greater than " + n +
          ", actual value was " + r)
      }, a.typeOf.number.greaterThanOrEquals = function(e, r, n) {
        if (a.typeOf.number(e, r), r < n) throw new t("Expected " + e + " to be greater than or equal to" + n +
          ", actual value was " + r)
      }, a.typeOf.object = function(e, r) {
        if ("object" != typeof r) throw new t(n(typeof r, "object", e))
      }, a.typeOf.bool = function(e, r) {
        if ("boolean" != typeof r) throw new t(n(typeof r, "boolean", e))
      }, a.typeOf.number.equals = function(e, r, n, i) {
        if (a.typeOf.number(e, n), a.typeOf.number(r, i), n !== i) throw new t(e + " must be equal to " + r +
          ", the actual values are " + n + " and " + i)
      }, a
    }), define("Core/freezeObject", ["./defined"], function(e) {
      "use strict";
      var t = Object.freeze;
      return e(t) || (t = function(e) {
        return e
      }), t
    }), define("Core/defaultValue", ["./freezeObject"], function(e) {
      "use strict";

      function t(e, t) {
        return void 0 !== e && null !== e ? e : t
      }
      return t.EMPTY_OBJECT = e({}), t
    }), define("ThirdParty/mersenne-twister", [], function() {
      var e = function(e) {
        void 0 == e && (e = (new Date).getTime()), this.N = 624, this.M = 397, this.MATRIX_A = 2567483615, this
          .UPPER_MASK = 2147483648, this.LOWER_MASK = 2147483647, this.mt = new Array(this.N), this.mti = this.N +
          1, this.init_genrand(e)
      };
      return e.prototype.init_genrand = function(e) {
        for (this.mt[0] = e >>> 0, this.mti = 1; this.mti < this.N; this.mti++) {
          var e = this.mt[this.mti - 1] ^ this.mt[this.mti - 1] >>> 30;
          this.mt[this.mti] = (1812433253 * ((4294901760 & e) >>> 16) << 16) + 1812433253 * (65535 & e) + this.mti,
            this.mt[this.mti] >>>= 0
        }
      }, e.prototype.genrand_int32 = function() {
        var e, t = new Array(0, this.MATRIX_A);
        if (this.mti >= this.N) {
          var r;
          for (this.mti == this.N + 1 && this.init_genrand(5489), r = 0; r < this.N - this.M; r++) e = this.mt[r] &
            this.UPPER_MASK | this.mt[r + 1] & this.LOWER_MASK, this.mt[r] = this.mt[r + this.M] ^ e >>> 1 ^ t[1 &
              e];
          for (; r < this.N - 1; r++) e = this.mt[r] & this.UPPER_MASK | this.mt[r + 1] & this.LOWER_MASK, this.mt[
            r] = this.mt[r + (this.M - this.N)] ^ e >>> 1 ^ t[1 & e];
          e = this.mt[this.N - 1] & this.UPPER_MASK | this.mt[0] & this.LOWER_MASK, this.mt[this.N - 1] = this.mt[
            this.M - 1] ^ e >>> 1 ^ t[1 & e], this.mti = 0
        }
        return e = this.mt[this.mti++], e ^= e >>> 11, e ^= e << 7 & 2636928640, e ^= e << 15 & 4022730752, (e ^=
          e >>> 18) >>> 0
      }, e.prototype.random = function() {
        return this.genrand_int32() * (1 / 4294967296)
      }, e
    }), define("Core/Math", ["../ThirdParty/mersenne-twister", "./Check", "./defaultValue", "./defined",
      "./DeveloperError"
    ], function(e, t, r, n, a) {
      "use strict";
      var i = {};
      i.EPSILON1 = .1, i.EPSILON2 = .01, i.EPSILON3 = .001, i.EPSILON4 = 1e-4, i.EPSILON5 = 1e-5, i.EPSILON6 = 1e-6, i
        .EPSILON7 = 1e-7, i.EPSILON8 = 1e-8, i.EPSILON9 = 1e-9, i.EPSILON10 = 1e-10, i.EPSILON11 = 1e-11, i
        .EPSILON12 = 1e-12, i.EPSILON13 = 1e-13, i.EPSILON14 = 1e-14, i.EPSILON15 = 1e-15, i.EPSILON16 = 1e-16, i
        .EPSILON17 = 1e-17, i.EPSILON18 = 1e-18, i.EPSILON19 = 1e-19, i.EPSILON20 = 1e-20, i.GRAVITATIONALPARAMETER =
        3986004418e5, i.SOLAR_RADIUS = 6955e5, i.LUNAR_RADIUS = 1737400, i.SIXTY_FOUR_KILOBYTES = 65536, i.sign = r(
          Math.sign,
          function(e) {
            return e = +e, 0 === e || e !== e ? e : e > 0 ? 1 : -1
          }), i.signNotZero = function(e) {
          return e < 0 ? -1 : 1
        }, i.toSNorm = function(e, t) {
          return t = r(t, 255), Math.round((.5 * i.clamp(e, -1, 1) + .5) * t)
        }, i.fromSNorm = function(e, t) {
          return t = r(t, 255), i.clamp(e, 0, t) / t * 2 - 1
        }, i.sinh = r(Math.sinh, function(e) {
          return (Math.exp(e) - Math.exp(-e)) / 2
        }), i.cosh = r(Math.cosh, function(e) {
          return (Math.exp(e) + Math.exp(-e)) / 2
        }), i.lerp = function(e, t, r) {
          return (1 - r) * e + r * t
        }, i.PI = Math.PI, i.ONE_OVER_PI = 1 / Math.PI, i.PI_OVER_TWO = Math.PI / 2, i.PI_OVER_THREE = Math.PI / 3, i
        .PI_OVER_FOUR = Math.PI / 4, i.PI_OVER_SIX = Math.PI / 6, i.THREE_PI_OVER_TWO = 3 * Math.PI / 2, i.TWO_PI =
        2 * Math.PI, i.ONE_OVER_TWO_PI = 1 / (2 * Math.PI), i.RADIANS_PER_DEGREE = Math.PI / 180, i
        .DEGREES_PER_RADIAN = 180 / Math.PI, i.RADIANS_PER_ARCSECOND = i.RADIANS_PER_DEGREE / 3600, i.toRadians =
        function(e) {
          return e * i.RADIANS_PER_DEGREE
        }, i.toDegrees = function(e) {
          return e * i.DEGREES_PER_RADIAN
        }, i.convertLongitudeRange = function(e) {
          var t = i.TWO_PI,
            r = e - Math.floor(e / t) * t;
          return r < -Math.PI ? r + t : r >= Math.PI ? r - t : r
        }, i.clampToLatitudeRange = function(e) {
          return i.clamp(e, -1 * i.PI_OVER_TWO, i.PI_OVER_TWO)
        }, i.negativePiToPi = function(e) {
          return i.zeroToTwoPi(e + i.PI) - i.PI
        }, i.zeroToTwoPi = function(e) {
          var t = i.mod(e, i.TWO_PI);
          return Math.abs(t) < i.EPSILON14 && Math.abs(e) > i.EPSILON14 ? i.TWO_PI : t
        }, i.mod = function(e, t) {
          return (e % t + t) % t
        }, i.equalsEpsilon = function(e, t, n, a) {
          a = r(a, n);
          var i = Math.abs(e - t);
          return i <= a || i <= n * Math.max(Math.abs(e), Math.abs(t))
        };
      var o = [1];
      i.factorial = function(e) {
        var t = o.length;
        if (e >= t)
          for (var r = o[t - 1], n = t; n <= e; n++) o.push(r * n);
        return o[e]
      }, i.incrementWrap = function(e, t, n) {
        return n = r(n, 0), ++e, e > t && (e = n), e
      }, i.isPowerOfTwo = function(e) {
        return 0 !== e && 0 == (e & e - 1)
      }, i.nextPowerOfTwo = function(e) {
        return --e, e |= e >> 1, e |= e >> 2, e |= e >> 4, e |= e >> 8, e |= e >> 16, ++e
      }, i.clamp = function(e, t, r) {
        return e < t ? t : e > r ? r : e
      };
      var u = new e;
      return i.setRandomNumberSeed = function(t) {
        u = new e(t)
      }, i.nextRandomNumber = function() {
        return u.random()
      }, i.randomBetween = function(e, t) {
        return i.nextRandomNumber() * (t - e) + e
      }, i.acosClamped = function(e) {
        return Math.acos(i.clamp(e, -1, 1))
      }, i.asinClamped = function(e) {
        return Math.asin(i.clamp(e, -1, 1))
      }, i.chordLength = function(e, t) {
        return 2 * t * Math.sin(.5 * e)
      }, i.logBase = function(e, t) {
        return Math.log(e) / Math.log(t)
      }, i.cbrt = r(Math.cbrt, function(e) {
        var t = Math.pow(Math.abs(e), 1 / 3);
        return e < 0 ? -t : t
      }), i.log2 = r(Math.log2, function(e) {
        return Math.log(e) * Math.LOG2E
      }), i.fog = function(e, t) {
        var r = e * t;
        return 1 - Math.exp(-r * r)
      }, i.fastApproximateAtan = function(e) {
        return e * (-.1784 * Math.abs(e) - .0663 * e * e + 1.0301)
      }, i.fastApproximateAtan2 = function(e, t) {
        var r, n, a = Math.abs(e);
        r = Math.abs(t), n = Math.max(a, r), r = Math.min(a, r);
        var o = r / n;
        return a = i.fastApproximateAtan(o), a = Math.abs(t) > Math.abs(e) ? i.PI_OVER_TWO - a : a, a = e < 0 ? i
          .PI - a : a, a = t < 0 ? -a : a
      }, i
    }), define("Core/Cartesian3", ["./Check", "./defaultValue", "./defined", "./DeveloperError", "./freezeObject",
      "./Math"
    ], function(e, t, r, n, a, i) {
      "use strict";

      function o(e, r, n) {
        this.x = t(e, 0), this.y = t(r, 0), this.z = t(n, 0)
      }
      o.fromSpherical = function(e, n) {
        r(n) || (n = new o);
        var a = e.clock,
          i = e.cone,
          u = t(e.magnitude, 1),
          s = u * Math.sin(i);
        return n.x = s * Math.cos(a), n.y = s * Math.sin(a), n.z = u * Math.cos(i), n
      }, o.fromElements = function(e, t, n, a) {
        return r(a) ? (a.x = e, a.y = t, a.z = n, a) : new o(e, t, n)
      }, o.clone = function(e, t) {
        if (r(e)) return r(t) ? (t.x = e.x, t.y = e.y, t.z = e.z, t) : new o(e.x, e.y, e.z)
      }, o.fromCartesian4 = o.clone, o.packedLength = 3, o.pack = function(e, r, n) {
        return n = t(n, 0), r[n++] = e.x, r[n++] = e.y, r[n] = e.z, r
      }, o.unpack = function(e, n, a) {
        return n = t(n, 0), r(a) || (a = new o), a.x = e[n++], a.y = e[n++], a.z = e[n], a
      }, o.packArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = 3 * n : t = new Array(3 * n);
        for (var a = 0; a < n; ++a) o.pack(e[a], t, 3 * a);
        return t
      }, o.unpackArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = n / 3 : t = new Array(n / 3);
        for (var a = 0; a < n; a += 3) {
          var i = a / 3;
          t[i] = o.unpack(e, a, t[i])
        }
        return t
      }, o.fromArray = o.unpack, o.maximumComponent = function(e) {
        return Math.max(e.x, e.y, e.z)
      }, o.minimumComponent = function(e) {
        return Math.min(e.x, e.y, e.z)
      }, o.minimumByComponent = function(e, t, r) {
        return r.x = Math.min(e.x, t.x), r.y = Math.min(e.y, t.y), r.z = Math.min(e.z, t.z), r
      }, o.maximumByComponent = function(e, t, r) {
        return r.x = Math.max(e.x, t.x), r.y = Math.max(e.y, t.y), r.z = Math.max(e.z, t.z), r
      }, o.magnitudeSquared = function(e) {
        return e.x * e.x + e.y * e.y + e.z * e.z
      }, o.magnitude = function(e) {
        return Math.sqrt(o.magnitudeSquared(e))
      };
      var u = new o;
      o.distance = function(e, t) {
        return o.subtract(e, t, u), o.magnitude(u)
      }, o.distanceSquared = function(e, t) {
        return o.subtract(e, t, u), o.magnitudeSquared(u)
      }, o.normalize = function(e, t) {
        var r = o.magnitude(e);
        return t.x = e.x / r, t.y = e.y / r, t.z = e.z / r, t
      }, o.dot = function(e, t) {
        return e.x * t.x + e.y * t.y + e.z * t.z
      }, o.multiplyComponents = function(e, t, r) {
        return r.x = e.x * t.x, r.y = e.y * t.y, r.z = e.z * t.z, r
      }, o.divideComponents = function(e, t, r) {
        return r.x = e.x / t.x, r.y = e.y / t.y, r.z = e.z / t.z, r
      }, o.add = function(e, t, r) {
        return r.x = e.x + t.x, r.y = e.y + t.y, r.z = e.z + t.z, r
      }, o.subtract = function(e, t, r) {
        return r.x = e.x - t.x, r.y = e.y - t.y, r.z = e.z - t.z, r
      }, o.multiplyByScalar = function(e, t, r) {
        return r.x = e.x * t, r.y = e.y * t, r.z = e.z * t, r
      }, o.divideByScalar = function(e, t, r) {
        return r.x = e.x / t, r.y = e.y / t, r.z = e.z / t, r
      }, o.negate = function(e, t) {
        return t.x = -e.x, t.y = -e.y, t.z = -e.z, t
      }, o.abs = function(e, t) {
        return t.x = Math.abs(e.x), t.y = Math.abs(e.y), t.z = Math.abs(e.z), t
      };
      var s = new o;
      o.lerp = function(e, t, r, n) {
        return o.multiplyByScalar(t, r, s), n = o.multiplyByScalar(e, 1 - r, n), o.add(s, n, n)
      };
      var c = new o,
        l = new o;
      o.angleBetween = function(e, t) {
        o.normalize(e, c), o.normalize(t, l);
        var r = o.dot(c, l),
          n = o.magnitude(o.cross(c, l, c));
        return Math.atan2(n, r)
      };
      var f = new o;
      o.mostOrthogonalAxis = function(e, t) {
        var r = o.normalize(e, f);
        return o.abs(r, r), t = r.x <= r.y ? r.x <= r.z ? o.clone(o.UNIT_X, t) : o.clone(o.UNIT_Z, t) : r.y <= r.z ?
          o.clone(o.UNIT_Y, t) : o.clone(o.UNIT_Z, t)
      }, o.projectVector = function(e, t, r) {
        var n = o.dot(e, t) / o.dot(t, t);
        return o.multiplyByScalar(t, n, r)
      }, o.equals = function(e, t) {
        return e === t || r(e) && r(t) && e.x === t.x && e.y === t.y && e.z === t.z
      }, o.equalsArray = function(e, t, r) {
        return e.x === t[r] && e.y === t[r + 1] && e.z === t[r + 2]
      }, o.equalsEpsilon = function(e, t, n, a) {
        return e === t || r(e) && r(t) && i.equalsEpsilon(e.x, t.x, n, a) && i.equalsEpsilon(e.y, t.y, n, a) && i
          .equalsEpsilon(e.z, t.z, n, a)
      }, o.cross = function(e, t, r) {
        var n = e.x,
          a = e.y,
          i = e.z,
          o = t.x,
          u = t.y,
          s = t.z,
          c = a * s - i * u,
          l = i * o - n * s,
          f = n * u - a * o;
        return r.x = c, r.y = l, r.z = f, r
      }, o.fromDegrees = function(e, t, r, n, a) {
        return e = i.toRadians(e), t = i.toRadians(t), o.fromRadians(e, t, r, n, a)
      };
      var d = new o,
        h = new o,
        m = new o(40680631590769, 40680631590769, 40408299984661.445);
      return o.fromRadians = function(e, n, a, i, u) {
        a = t(a, 0);
        var s = r(i) ? i.radiiSquared : m,
          c = Math.cos(n);
        d.x = c * Math.cos(e), d.y = c * Math.sin(e), d.z = Math.sin(n), d = o.normalize(d, d), o
          .multiplyComponents(s, d, h);
        var l = Math.sqrt(o.dot(d, h));
        return h = o.divideByScalar(h, l, h), d = o.multiplyByScalar(d, a, d), r(u) || (u = new o), o.add(h, d, u)
      }, o.fromDegreesArray = function(e, t, n) {
        var a = e.length;
        r(n) ? n.length = a / 2 : n = new Array(a / 2);
        for (var i = 0; i < a; i += 2) {
          var u = e[i],
            s = e[i + 1],
            c = i / 2;
          n[c] = o.fromDegrees(u, s, 0, t, n[c])
        }
        return n
      }, o.fromRadiansArray = function(e, t, n) {
        var a = e.length;
        r(n) ? n.length = a / 2 : n = new Array(a / 2);
        for (var i = 0; i < a; i += 2) {
          var u = e[i],
            s = e[i + 1],
            c = i / 2;
          n[c] = o.fromRadians(u, s, 0, t, n[c])
        }
        return n
      }, o.fromDegreesArrayHeights = function(e, t, n) {
        var a = e.length;
        r(n) ? n.length = a / 3 : n = new Array(a / 3);
        for (var i = 0; i < a; i += 3) {
          var u = e[i],
            s = e[i + 1],
            c = e[i + 2],
            l = i / 3;
          n[l] = o.fromDegrees(u, s, c, t, n[l])
        }
        return n
      }, o.fromRadiansArrayHeights = function(e, t, n) {
        var a = e.length;
        r(n) ? n.length = a / 3 : n = new Array(a / 3);
        for (var i = 0; i < a; i += 3) {
          var u = e[i],
            s = e[i + 1],
            c = e[i + 2],
            l = i / 3;
          n[l] = o.fromRadians(u, s, c, t, n[l])
        }
        return n
      }, o.ZERO = a(new o(0, 0, 0)), o.UNIT_X = a(new o(1, 0, 0)), o.UNIT_Y = a(new o(0, 1, 0)), o.UNIT_Z = a(new o(
        0, 0, 1)), o.prototype.clone = function(e) {
        return o.clone(this, e)
      }, o.prototype.equals = function(e) {
        return o.equals(this, e)
      }, o.prototype.equalsEpsilon = function(e, t, r) {
        return o.equalsEpsilon(this, e, t, r)
      }, o.prototype.toString = function() {
        return "(" + this.x + ", " + this.y + ", " + this.z + ")"
      }, o
    }), define("Core/scaleToGeodeticSurface", ["./Cartesian3", "./defined", "./DeveloperError", "./Math"], function(e,
      t, r, n) {
      "use strict";

      function a(r, a, u, s, c) {
        var l = r.x,
          f = r.y,
          d = r.z,
          h = a.x,
          m = a.y,
          E = a.z,
          p = l * l * h * h,
          _ = f * f * m * m,
          y = d * d * E * E,
          T = p + _ + y,
          R = Math.sqrt(1 / T),
          A = e.multiplyByScalar(r, R, i);
        if (T < s) return isFinite(R) ? e.clone(A, c) : void 0;
        var S = u.x,
          v = u.y,
          g = u.z,
          M = o;
        M.x = A.x * S * 2, M.y = A.y * v * 2, M.z = A.z * g * 2;
        var N, O, I, w, C, x, P, U, D, L, F, b = (1 - R) * e.magnitude(r) / (.5 * e.magnitude(M)),
          B = 0;
        do {
          b -= B, I = 1 / (1 + b * S), w = 1 / (1 + b * v), C = 1 / (1 + b * g), x = I * I, P = w * w, U = C * C, D =
            x * I, L = P * w, F = U * C, N = p * x + _ * P + y * U - 1, O = p * D * S + _ * L * v + y * F * g;
          B = N / (-2 * O)
        } while (Math.abs(N) > n.EPSILON12);
        return t(c) ? (c.x = l * I, c.y = f * w, c.z = d * C, c) : new e(l * I, f * w, d * C)
      }
      var i = new e,
        o = new e;
      return a
    }), define("Core/Cartographic", ["./Cartesian3", "./Check", "./defaultValue", "./defined", "./freezeObject",
      "./Math", "./scaleToGeodeticSurface"
    ], function(e, t, r, n, a, i, o) {
      "use strict";

      function u(e, t, n) {
        this.longitude = r(e, 0), this.latitude = r(t, 0), this.height = r(n, 0)
      }
      u.fromRadians = function(e, t, a, i) {
        return a = r(a, 0), n(i) ? (i.longitude = e, i.latitude = t, i.height = a, i) : new u(e, t, a)
      }, u.fromDegrees = function(e, t, r, n) {
        return e = i.toRadians(e), t = i.toRadians(t), u.fromRadians(e, t, r, n)
      };
      var s = new e,
        c = new e,
        l = new e,
        f = new e(1 / 6378137, 1 / 6378137, 1 / 6356752.314245179),
        d = new e(1 / 40680631590769, 1 / 40680631590769, 1 / 40408299984661.445),
        h = i.EPSILON1;
      return u.fromCartesian = function(t, r, a) {
        var m = n(r) ? r.oneOverRadii : f,
          E = n(r) ? r.oneOverRadiiSquared : d,
          p = n(r) ? r._centerToleranceSquared : h,
          _ = o(t, m, E, p, c);
        if (n(_)) {
          var y = e.multiplyComponents(_, E, s);
          y = e.normalize(y, y);
          var T = e.subtract(t, _, l),
            R = Math.atan2(y.y, y.x),
            A = Math.asin(y.z),
            S = i.sign(e.dot(T, t)) * e.magnitude(T);
          return n(a) ? (a.longitude = R, a.latitude = A, a.height = S, a) : new u(R, A, S)
        }
      }, u.toCartesian = function(t, r, n) {
        return e.fromRadians(t.longitude, t.latitude, t.height, r, n)
      }, u.clone = function(e, t) {
        if (n(e)) return n(t) ? (t.longitude = e.longitude, t.latitude = e.latitude, t.height = e.height, t) :
          new u(e.longitude, e.latitude, e.height)
      }, u.equals = function(e, t) {
        return e === t || n(e) && n(t) && e.longitude === t.longitude && e.latitude === t.latitude && e.height === t
          .height
      }, u.equalsEpsilon = function(e, t, r) {
        return e === t || n(e) && n(t) && Math.abs(e.longitude - t.longitude) <= r && Math.abs(e.latitude - t
          .latitude) <= r && Math.abs(e.height - t.height) <= r
      }, u.ZERO = a(new u(0, 0, 0)), u.prototype.clone = function(e) {
        return u.clone(this, e)
      }, u.prototype.equals = function(e) {
        return u.equals(this, e)
      }, u.prototype.equalsEpsilon = function(e, t) {
        return u.equalsEpsilon(this, e, t)
      }, u.prototype.toString = function() {
        return "(" + this.longitude + ", " + this.latitude + ", " + this.height + ")"
      }, u
    }), define("Core/defineProperties", ["./defined"], function(e) {
      "use strict";
      var t = function() {
          try {
            return "x" in Object.defineProperty({}, "x", {})
          } catch (e) {
            return !1
          }
        }(),
        r = Object.defineProperties;
      return t && e(r) || (r = function(e) {
        return e
      }), r
    }), define("Core/Ellipsoid", ["./Cartesian3", "./Cartographic", "./Check", "./defaultValue", "./defined",
      "./defineProperties", "./DeveloperError", "./freezeObject", "./Math", "./scaleToGeodeticSurface"
    ], function(e, t, r, n, a, i, o, u, s, c) {
      "use strict";

      function l(t, r, a, i) {
        r = n(r, 0), a = n(a, 0), i = n(i, 0), t._radii = new e(r, a, i), t._radiiSquared = new e(r * r, a * a, i *
          i), t._radiiToTheFourth = new e(r * r * r * r, a * a * a * a, i * i * i * i), t._oneOverRadii = new e(0 ===
            r ? 0 : 1 / r, 0 === a ? 0 : 1 / a, 0 === i ? 0 : 1 / i), t._oneOverRadiiSquared = new e(0 === r ? 0 : 1 /
            (r * r), 0 === a ? 0 : 1 / (a * a), 0 === i ? 0 : 1 / (i * i)), t._minimumRadius = Math.min(r, a, i), t
          ._maximumRadius = Math.max(r, a, i), t._centerToleranceSquared = s.EPSILON1, 0 !== t._radiiSquared.z && (t
            ._squaredXOverSquaredZ = t._radiiSquared.x / t._radiiSquared.z)
      }

      function f(e, t, r) {
        this._radii = void 0, this._radiiSquared = void 0, this._radiiToTheFourth = void 0, this._oneOverRadii =
          void 0, this._oneOverRadiiSquared = void 0, this._minimumRadius = void 0, this._maximumRadius = void 0, this
          ._centerToleranceSquared = void 0, this._squaredXOverSquaredZ = void 0, l(this, e, t, r)
      }
      i(f.prototype, {
          radii: {
            get: function() {
              return this._radii
            }
          },
          radiiSquared: {
            get: function() {
              return this._radiiSquared
            }
          },
          radiiToTheFourth: {
            get: function() {
              return this._radiiToTheFourth
            }
          },
          oneOverRadii: {
            get: function() {
              return this._oneOverRadii
            }
          },
          oneOverRadiiSquared: {
            get: function() {
              return this._oneOverRadiiSquared
            }
          },
          minimumRadius: {
            get: function() {
              return this._minimumRadius
            }
          },
          maximumRadius: {
            get: function() {
              return this._maximumRadius
            }
          }
        }), f.clone = function(t, r) {
          if (a(t)) {
            var n = t._radii;
            return a(r) ? (e.clone(n, r._radii), e.clone(t._radiiSquared, r._radiiSquared), e.clone(t
                ._radiiToTheFourth, r._radiiToTheFourth), e.clone(t._oneOverRadii, r._oneOverRadii), e.clone(t
                ._oneOverRadiiSquared, r._oneOverRadiiSquared), r._minimumRadius = t._minimumRadius, r
              ._maximumRadius = t._maximumRadius, r._centerToleranceSquared = t._centerToleranceSquared, r) : new f(
              n.x, n.y, n.z)
          }
        }, f.fromCartesian3 = function(e, t) {
          return a(t) || (t = new f), a(e) ? (l(t, e.x, e.y, e.z), t) : t
        }, f.WGS84 = u(new f(6378137, 6378137, 6356752.314245179)), f.UNIT_SPHERE = u(new f(1, 1, 1)), f.MOON = u(
          new f(s.LUNAR_RADIUS, s.LUNAR_RADIUS, s.LUNAR_RADIUS)), f.prototype.clone = function(e) {
          return f.clone(this, e)
        }, f.packedLength = e.packedLength, f.pack = function(t, r, a) {
          return a = n(a, 0), e.pack(t._radii, r, a), r
        }, f.unpack = function(t, r, a) {
          r = n(r, 0);
          var i = e.unpack(t, r);
          return f.fromCartesian3(i, a)
        }, f.prototype.geocentricSurfaceNormal = e.normalize, f.prototype.geodeticSurfaceNormalCartographic =
        function(t, r) {
          var n = t.longitude,
            i = t.latitude,
            o = Math.cos(i),
            u = o * Math.cos(n),
            s = o * Math.sin(n),
            c = Math.sin(i);
          return a(r) || (r = new e), r.x = u, r.y = s, r.z = c, e.normalize(r, r)
        }, f.prototype.geodeticSurfaceNormal = function(t, r) {
          return a(r) || (r = new e), r = e.multiplyComponents(t, this._oneOverRadiiSquared, r), e.normalize(r, r)
        };
      var d = new e,
        h = new e;
      f.prototype.cartographicToCartesian = function(t, r) {
        var n = d,
          i = h;
        this.geodeticSurfaceNormalCartographic(t, n), e.multiplyComponents(this._radiiSquared, n, i);
        var o = Math.sqrt(e.dot(n, i));
        return e.divideByScalar(i, o, i), e.multiplyByScalar(n, t.height, n), a(r) || (r = new e), e.add(i, n, r)
      }, f.prototype.cartographicArrayToCartesianArray = function(e, t) {
        var r = e.length;
        a(t) ? t.length = r : t = new Array(r);
        for (var n = 0; n < r; n++) t[n] = this.cartographicToCartesian(e[n], t[n]);
        return t
      };
      var m = new e,
        E = new e,
        p = new e;
      return f.prototype.cartesianToCartographic = function(r, n) {
        var i = this.scaleToGeodeticSurface(r, E);
        if (a(i)) {
          var o = this.geodeticSurfaceNormal(i, m),
            u = e.subtract(r, i, p),
            c = Math.atan2(o.y, o.x),
            l = Math.asin(o.z),
            f = s.sign(e.dot(u, r)) * e.magnitude(u);
          return a(n) ? (n.longitude = c, n.latitude = l, n.height = f, n) : new t(c, l, f)
        }
      }, f.prototype.cartesianArrayToCartographicArray = function(e, t) {
        var r = e.length;
        a(t) ? t.length = r : t = new Array(r);
        for (var n = 0; n < r; ++n) t[n] = this.cartesianToCartographic(e[n], t[n]);
        return t
      }, f.prototype.scaleToGeodeticSurface = function(e, t) {
        return c(e, this._oneOverRadii, this._oneOverRadiiSquared, this._centerToleranceSquared, t)
      }, f.prototype.scaleToGeocentricSurface = function(t, r) {
        a(r) || (r = new e);
        var n = t.x,
          i = t.y,
          o = t.z,
          u = this._oneOverRadiiSquared,
          s = 1 / Math.sqrt(n * n * u.x + i * i * u.y + o * o * u.z);
        return e.multiplyByScalar(t, s, r)
      }, f.prototype.transformPositionToScaledSpace = function(t, r) {
        return a(r) || (r = new e), e.multiplyComponents(t, this._oneOverRadii, r)
      }, f.prototype.transformPositionFromScaledSpace = function(t, r) {
        return a(r) || (r = new e), e.multiplyComponents(t, this._radii, r)
      }, f.prototype.equals = function(t) {
        return this === t || a(t) && e.equals(this._radii, t._radii)
      }, f.prototype.toString = function() {
        return this._radii.toString()
      }, f.prototype.getSurfaceNormalIntersectionWithZAxis = function(t, r, i) {
        r = n(r, 0);
        var o = this._squaredXOverSquaredZ;
        if (a(i) || (i = new e), i.x = 0, i.y = 0, i.z = t.z * (1 - o), !(Math.abs(i.z) >= this._radii.z - r))
          return i
      }, f
    }), define("Core/Intersect", ["./freezeObject"], function(e) {
      "use strict";
      return e({
        OUTSIDE: -1,
        INTERSECTING: 0,
        INSIDE: 1
      })
    }), define("Core/AxisAlignedBoundingBox", ["./Cartesian3", "./Check", "./defaultValue", "./defined", "./Intersect"],
      function(e, t, r, n, a) {
        "use strict";

        function i(t, a, i) {
          this.minimum = e.clone(r(t, e.ZERO)), this.maximum = e.clone(r(a, e.ZERO)), n(i) ? i = e.clone(i) : (i = e
            .add(this.minimum, this.maximum, new e), e.multiplyByScalar(i, .5, i)), this.center = i
        }
        i.fromPoints = function(t, r) {
          if (n(r) || (r = new i), !n(t) || 0 === t.length) return r.minimum = e.clone(e.ZERO, r.minimum), r.maximum =
            e.clone(e.ZERO, r.maximum), r.center = e.clone(e.ZERO, r.center), r;
          for (var a = t[0].x, o = t[0].y, u = t[0].z, s = t[0].x, c = t[0].y, l = t[0].z, f = t.length, d = 1; d <
            f; d++) {
            var h = t[d],
              m = h.x,
              E = h.y,
              p = h.z;
            a = Math.min(m, a), s = Math.max(m, s), o = Math.min(E, o), c = Math.max(E, c), u = Math.min(p, u), l =
              Math.max(p, l)
          }
          var _ = r.minimum;
          _.x = a, _.y = o, _.z = u;
          var y = r.maximum;
          y.x = s, y.y = c, y.z = l;
          var T = e.add(_, y, r.center);
          return e.multiplyByScalar(T, .5, T), r
        }, i.clone = function(t, r) {
          if (n(t)) return n(r) ? (r.minimum = e.clone(t.minimum, r.minimum), r.maximum = e.clone(t.maximum, r
            .maximum), r.center = e.clone(t.center, r.center), r) : new i(t.minimum, t.maximum, t.center)
        }, i.equals = function(t, r) {
          return t === r || n(t) && n(r) && e.equals(t.center, r.center) && e.equals(t.minimum, r.minimum) && e
            .equals(t.maximum, r.maximum)
        };
        var o = new e;
        return i.intersectPlane = function(t, r) {
          o = e.subtract(t.maximum, t.minimum, o);
          var n = e.multiplyByScalar(o, .5, o),
            i = r.normal,
            u = n.x * Math.abs(i.x) + n.y * Math.abs(i.y) + n.z * Math.abs(i.z),
            s = e.dot(t.center, i) + r.distance;
          return s - u > 0 ? a.INSIDE : s + u < 0 ? a.OUTSIDE : a.INTERSECTING
        }, i.prototype.clone = function(e) {
          return i.clone(this, e)
        }, i.prototype.intersectPlane = function(e) {
          return i.intersectPlane(this, e)
        }, i.prototype.equals = function(e) {
          return i.equals(this, e)
        }, i
      }), define("Core/GeographicProjection", ["./Cartesian3", "./Cartographic", "./defaultValue", "./defined",
      "./defineProperties", "./DeveloperError", "./Ellipsoid"
    ], function(e, t, r, n, a, i, o) {
      "use strict";

      function u(e) {
        this._ellipsoid = r(e, o.WGS84), this._semimajorAxis = this._ellipsoid.maximumRadius, this
          ._oneOverSemimajorAxis = 1 / this._semimajorAxis
      }
      return a(u.prototype, {
        ellipsoid: {
          get: function() {
            return this._ellipsoid
          }
        }
      }), u.prototype.project = function(t, r) {
        var a = this._semimajorAxis,
          i = t.longitude * a,
          o = t.latitude * a,
          u = t.height;
        return n(r) ? (r.x = i, r.y = o, r.z = u, r) : new e(i, o, u)
      }, u.prototype.unproject = function(e, r) {
        var a = this._oneOverSemimajorAxis,
          i = e.x * a,
          o = e.y * a,
          u = e.z;
        return n(r) ? (r.longitude = i, r.latitude = o, r.height = u, r) : new t(i, o, u)
      }, u
    }), define("Core/Interval", ["./defaultValue"], function(e) {
      "use strict";

      function t(t, r) {
        this.start = e(t, 0), this.stop = e(r, 0)
      }
      return t
    }), define("Core/Matrix3", ["./Cartesian3", "./Check", "./defaultValue", "./defined", "./defineProperties",
      "./DeveloperError", "./freezeObject", "./Math"
    ], function(e, t, r, n, a, i, o, u) {
      "use strict";

      function s(e, t, n, a, i, o, u, s, c) {
        this[0] = r(e, 0), this[1] = r(a, 0), this[2] = r(u, 0), this[3] = r(t, 0), this[4] = r(i, 0), this[5] = r(s,
          0), this[6] = r(n, 0), this[7] = r(o, 0), this[8] = r(c, 0)
      }

      function c(e) {
        for (var t = 0, r = 0; r < 9; ++r) {
          var n = e[r];
          t += n * n
        }
        return Math.sqrt(t)
      }

      function l(e) {
        for (var t = 0, r = 0; r < 3; ++r) {
          var n = e[s.getElementIndex(E[r], m[r])];
          t += 2 * n * n
        }
        return Math.sqrt(t)
      }

      function f(e, t) {
        for (var r = u.EPSILON15, n = 0, a = 1, i = 0; i < 3; ++i) {
          var o = Math.abs(e[s.getElementIndex(E[i], m[i])]);
          o > n && (a = i, n = o)
        }
        var c = 1,
          l = 0,
          f = m[a],
          d = E[a];
        if (Math.abs(e[s.getElementIndex(d, f)]) > r) {
          var h, p = e[s.getElementIndex(d, d)],
            _ = e[s.getElementIndex(f, f)],
            y = e[s.getElementIndex(d, f)],
            T = (p - _) / 2 / y;
          h = T < 0 ? -1 / (-T + Math.sqrt(1 + T * T)) : 1 / (T + Math.sqrt(1 + T * T)), c = 1 / Math.sqrt(1 + h * h),
            l = h * c
        }
        return t = s.clone(s.IDENTITY, t), t[s.getElementIndex(f, f)] = t[s.getElementIndex(d, d)] = c, t[s
          .getElementIndex(d, f)] = l, t[s.getElementIndex(f, d)] = -l, t
      }
      s.packedLength = 9, s.pack = function(e, t, n) {
        return n = r(n, 0), t[n++] = e[0], t[n++] = e[1], t[n++] = e[2], t[n++] = e[3], t[n++] = e[4], t[n++] = e[
          5], t[n++] = e[6], t[n++] = e[7], t[n++] = e[8], t
      }, s.unpack = function(e, t, a) {
        return t = r(t, 0), n(a) || (a = new s), a[0] = e[t++], a[1] = e[t++], a[2] = e[t++], a[3] = e[t++], a[4] =
          e[t++], a[5] = e[t++], a[6] = e[t++], a[7] = e[t++], a[8] = e[t++], a
      }, s.clone = function(e, t) {
        if (n(e)) return n(t) ? (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t[
          6] = e[6], t[7] = e[7], t[8] = e[8], t) : new s(e[0], e[3], e[6], e[1], e[4], e[7], e[2], e[5], e[8])
      }, s.fromArray = function(e, t, a) {
        return t = r(t, 0), n(a) || (a = new s), a[0] = e[t], a[1] = e[t + 1], a[2] = e[t + 2], a[3] = e[t + 3], a[
          4] = e[t + 4], a[5] = e[t + 5], a[6] = e[t + 6], a[7] = e[t + 7], a[8] = e[t + 8], a
      }, s.fromColumnMajorArray = function(e, t) {
        return s.clone(e, t)
      }, s.fromRowMajorArray = function(e, t) {
        return n(t) ? (t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[
          7] = e[5], t[8] = e[8], t) : new s(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8])
      }, s.fromQuaternion = function(e, t) {
        var r = e.x * e.x,
          a = e.x * e.y,
          i = e.x * e.z,
          o = e.x * e.w,
          u = e.y * e.y,
          c = e.y * e.z,
          l = e.y * e.w,
          f = e.z * e.z,
          d = e.z * e.w,
          h = e.w * e.w,
          m = r - u - f + h,
          E = 2 * (a - d),
          p = 2 * (i + l),
          _ = 2 * (a + d),
          y = -r + u - f + h,
          T = 2 * (c - o),
          R = 2 * (i - l),
          A = 2 * (c + o),
          S = -r - u + f + h;
        return n(t) ? (t[0] = m, t[1] = _, t[2] = R, t[3] = E, t[4] = y, t[5] = A, t[6] = p, t[7] = T, t[8] = S,
          t) : new s(m, E, p, _, y, T, R, A, S)
      }, s.fromHeadingPitchRoll = function(e, t) {
        var r = Math.cos(-e.pitch),
          a = Math.cos(-e.heading),
          i = Math.cos(e.roll),
          o = Math.sin(-e.pitch),
          u = Math.sin(-e.heading),
          c = Math.sin(e.roll),
          l = r * a,
          f = -i * u + c * o * a,
          d = c * u + i * o * a,
          h = r * u,
          m = i * a + c * o * u,
          E = -c * a + i * o * u,
          p = -o,
          _ = c * r,
          y = i * r;
        return n(t) ? (t[0] = l, t[1] = h, t[2] = p, t[3] = f, t[4] = m, t[5] = _, t[6] = d, t[7] = E, t[8] = y,
          t) : new s(l, f, d, h, m, E, p, _, y)
      }, s.fromScale = function(e, t) {
        return n(t) ? (t[0] = e.x, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = e.y, t[5] = 0, t[6] = 0, t[7] = 0, t[8] = e
          .z, t) : new s(e.x, 0, 0, 0, e.y, 0, 0, 0, e.z)
      }, s.fromUniformScale = function(e, t) {
        return n(t) ? (t[0] = e, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = e, t[5] = 0, t[6] = 0, t[7] = 0, t[8] = e,
          t) : new s(e, 0, 0, 0, e, 0, 0, 0, e)
      }, s.fromCrossProduct = function(e, t) {
        return n(t) ? (t[0] = 0, t[1] = e.z, t[2] = -e.y, t[3] = -e.z, t[4] = 0, t[5] = e.x, t[6] = e.y, t[7] = -e
          .x, t[8] = 0, t) : new s(0, -e.z, e.y, e.z, 0, -e.x, -e.y, e.x, 0)
      }, s.fromRotationX = function(e, t) {
        var r = Math.cos(e),
          a = Math.sin(e);
        return n(t) ? (t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = r, t[5] = a, t[6] = 0, t[7] = -a, t[8] = r,
          t) : new s(1, 0, 0, 0, r, -a, 0, a, r)
      }, s.fromRotationY = function(e, t) {
        var r = Math.cos(e),
          a = Math.sin(e);
        return n(t) ? (t[0] = r, t[1] = 0, t[2] = -a, t[3] = 0, t[4] = 1, t[5] = 0, t[6] = a, t[7] = 0, t[8] = r,
          t) : new s(r, 0, a, 0, 1, 0, -a, 0, r)
      }, s.fromRotationZ = function(e, t) {
        var r = Math.cos(e),
          a = Math.sin(e);
        return n(t) ? (t[0] = r, t[1] = a, t[2] = 0, t[3] = -a, t[4] = r, t[5] = 0, t[6] = 0, t[7] = 0, t[8] = 1,
          t) : new s(r, -a, 0, a, r, 0, 0, 0, 1)
      }, s.toArray = function(e, t) {
        return n(t) ? (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t[6] = e[6], t[
          7] = e[7], t[8] = e[8], t) : [e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8]]
      }, s.getElementIndex = function(e, t) {
        return 3 * e + t
      }, s.getColumn = function(e, t, r) {
        var n = 3 * t,
          a = e[n],
          i = e[n + 1],
          o = e[n + 2];
        return r.x = a, r.y = i, r.z = o, r
      }, s.setColumn = function(e, t, r, n) {
        n = s.clone(e, n);
        var a = 3 * t;
        return n[a] = r.x, n[a + 1] = r.y, n[a + 2] = r.z, n
      }, s.getRow = function(e, t, r) {
        var n = e[t],
          a = e[t + 3],
          i = e[t + 6];
        return r.x = n, r.y = a, r.z = i, r
      }, s.setRow = function(e, t, r, n) {
        return n = s.clone(e, n), n[t] = r.x, n[t + 3] = r.y, n[t + 6] = r.z, n
      };
      var d = new e;
      s.getScale = function(t, r) {
        return r.x = e.magnitude(e.fromElements(t[0], t[1], t[2], d)), r.y = e.magnitude(e.fromElements(t[3], t[4],
          t[5], d)), r.z = e.magnitude(e.fromElements(t[6], t[7], t[8], d)), r
      };
      var h = new e;
      s.getMaximumScale = function(t) {
        return s.getScale(t, h), e.maximumComponent(h)
      }, s.multiply = function(e, t, r) {
        var n = e[0] * t[0] + e[3] * t[1] + e[6] * t[2],
          a = e[1] * t[0] + e[4] * t[1] + e[7] * t[2],
          i = e[2] * t[0] + e[5] * t[1] + e[8] * t[2],
          o = e[0] * t[3] + e[3] * t[4] + e[6] * t[5],
          u = e[1] * t[3] + e[4] * t[4] + e[7] * t[5],
          s = e[2] * t[3] + e[5] * t[4] + e[8] * t[5],
          c = e[0] * t[6] + e[3] * t[7] + e[6] * t[8],
          l = e[1] * t[6] + e[4] * t[7] + e[7] * t[8],
          f = e[2] * t[6] + e[5] * t[7] + e[8] * t[8];
        return r[0] = n, r[1] = a, r[2] = i, r[3] = o, r[4] = u, r[5] = s, r[6] = c, r[7] = l, r[8] = f, r
      }, s.add = function(e, t, r) {
        return r[0] = e[0] + t[0], r[1] = e[1] + t[1], r[2] = e[2] + t[2], r[3] = e[3] + t[3], r[4] = e[4] + t[4],
          r[5] = e[5] + t[5], r[6] = e[6] + t[6], r[7] = e[7] + t[7], r[8] = e[8] + t[8], r
      }, s.subtract = function(e, t, r) {
        return r[0] = e[0] - t[0], r[1] = e[1] - t[1], r[2] = e[2] - t[2], r[3] = e[3] - t[3], r[4] = e[4] - t[4],
          r[5] = e[5] - t[5], r[6] = e[6] - t[6], r[7] = e[7] - t[7], r[8] = e[8] - t[8], r
      }, s.multiplyByVector = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z,
          o = e[0] * n + e[3] * a + e[6] * i,
          u = e[1] * n + e[4] * a + e[7] * i,
          s = e[2] * n + e[5] * a + e[8] * i;
        return r.x = o, r.y = u, r.z = s, r
      }, s.multiplyByScalar = function(e, t, r) {
        return r[0] = e[0] * t, r[1] = e[1] * t, r[2] = e[2] * t, r[3] = e[3] * t, r[4] = e[4] * t, r[5] = e[5] * t,
          r[6] = e[6] * t, r[7] = e[7] * t, r[8] = e[8] * t, r
      }, s.multiplyByScale = function(e, t, r) {
        return r[0] = e[0] * t.x, r[1] = e[1] * t.x, r[2] = e[2] * t.x, r[3] = e[3] * t.y, r[4] = e[4] * t.y, r[5] =
          e[5] * t.y, r[6] = e[6] * t.z, r[7] = e[7] * t.z, r[8] = e[8] * t.z, r
      }, s.negate = function(e, t) {
        return t[0] = -e[0], t[1] = -e[1], t[2] = -e[2], t[3] = -e[3], t[4] = -e[4], t[5] = -e[5], t[6] = -e[6], t[
          7] = -e[7], t[8] = -e[8], t
      }, s.transpose = function(e, t) {
        var r = e[0],
          n = e[3],
          a = e[6],
          i = e[1],
          o = e[4],
          u = e[7],
          s = e[2],
          c = e[5],
          l = e[8];
        return t[0] = r, t[1] = n, t[2] = a, t[3] = i, t[4] = o, t[5] = u, t[6] = s, t[7] = c, t[8] = l, t
      };
      var m = [1, 0, 0],
        E = [2, 2, 1],
        p = new s,
        _ = new s;
      return s.computeEigenDecomposition = function(e, t) {
          var r = u.EPSILON20,
            a = 0,
            i = 0;
          n(t) || (t = {});
          for (var o = t.unitary = s.clone(s.IDENTITY, t.unitary), d = t.diagonal = s.clone(e, t.diagonal), h = r * c(
              d); i < 10 && l(d) > h;) f(d, p), s.transpose(p, _), s.multiply(d, p, d), s.multiply(_, d, d), s
            .multiply(o, p, o), ++a > 2 && (++i, a = 0);
          return t
        }, s.abs = function(e, t) {
          return t[0] = Math.abs(e[0]), t[1] = Math.abs(e[1]), t[2] = Math.abs(e[2]), t[3] = Math.abs(e[3]), t[4] =
            Math.abs(e[4]), t[5] = Math.abs(e[5]), t[6] = Math.abs(e[6]), t[7] = Math.abs(e[7]), t[8] = Math.abs(e[
            8]), t
        }, s.determinant = function(e) {
          var t = e[0],
            r = e[3],
            n = e[6],
            a = e[1],
            i = e[4],
            o = e[7],
            u = e[2],
            s = e[5],
            c = e[8];
          return t * (i * c - s * o) + a * (s * n - r * c) + u * (r * o - i * n)
        }, s.inverse = function(e, t) {
          var r = e[0],
            n = e[1],
            a = e[2],
            i = e[3],
            o = e[4],
            u = e[5],
            c = e[6],
            l = e[7],
            f = e[8],
            d = s.determinant(e);
          t[0] = o * f - l * u, t[1] = l * a - n * f, t[2] = n * u - o * a, t[3] = c * u - i * f, t[4] = r * f - c *
            a, t[5] = i * a - r * u, t[6] = i * l - c * o, t[7] = c * n - r * l, t[8] = r * o - i * n;
          var h = 1 / d;
          return s.multiplyByScalar(t, h, t)
        }, s.equals = function(e, t) {
          return e === t || n(e) && n(t) && e[0] === t[0] && e[1] === t[1] && e[2] === t[2] && e[3] === t[3] && e[
            4] === t[4] && e[5] === t[5] && e[6] === t[6] && e[7] === t[7] && e[8] === t[8]
        }, s.equalsEpsilon = function(e, t, r) {
          return e === t || n(e) && n(t) && Math.abs(e[0] - t[0]) <= r && Math.abs(e[1] - t[1]) <= r && Math.abs(e[
              2] - t[2]) <= r && Math.abs(e[3] - t[3]) <= r && Math.abs(e[4] - t[4]) <= r && Math.abs(e[5] - t[5]) <=
            r && Math.abs(e[6] - t[6]) <= r && Math.abs(e[7] - t[7]) <= r && Math.abs(e[8] - t[8]) <= r
        }, s.IDENTITY = o(new s(1, 0, 0, 0, 1, 0, 0, 0, 1)), s.ZERO = o(new s(0, 0, 0, 0, 0, 0, 0, 0, 0)), s
        .COLUMN0ROW0 = 0, s.COLUMN0ROW1 = 1, s.COLUMN0ROW2 = 2, s.COLUMN1ROW0 = 3, s.COLUMN1ROW1 = 4, s.COLUMN1ROW2 =
        5, s.COLUMN2ROW0 = 6, s.COLUMN2ROW1 = 7, s.COLUMN2ROW2 = 8, a(s.prototype, {
          length: {
            get: function() {
              return s.packedLength
            }
          }
        }), s.prototype.clone = function(e) {
          return s.clone(this, e)
        }, s.prototype.equals = function(e) {
          return s.equals(this, e)
        }, s.equalsArray = function(e, t, r) {
          return e[0] === t[r] && e[1] === t[r + 1] && e[2] === t[r + 2] && e[3] === t[r + 3] && e[4] === t[r + 4] &&
            e[5] === t[r + 5] && e[6] === t[r + 6] && e[7] === t[r + 7] && e[8] === t[r + 8]
        }, s.prototype.equalsEpsilon = function(e, t) {
          return s.equalsEpsilon(this, e, t)
        }, s.prototype.toString = function() {
          return "(" + this[0] + ", " + this[3] + ", " + this[6] + ")\n(" + this[1] + ", " + this[4] + ", " + this[
            7] + ")\n(" + this[2] + ", " + this[5] + ", " + this[8] + ")"
        }, s
    }), define("Core/Cartesian4", ["./Check", "./defaultValue", "./defined", "./DeveloperError", "./freezeObject",
      "./Math"
    ], function(e, t, r, n, a, i) {
      "use strict";

      function o(e, r, n, a) {
        this.x = t(e, 0), this.y = t(r, 0), this.z = t(n, 0), this.w = t(a, 0)
      }
      o.fromElements = function(e, t, n, a, i) {
        return r(i) ? (i.x = e, i.y = t, i.z = n, i.w = a, i) : new o(e, t, n, a)
      }, o.fromColor = function(e, t) {
        return r(t) ? (t.x = e.red, t.y = e.green, t.z = e.blue, t.w = e.alpha, t) : new o(e.red, e.green, e.blue, e
          .alpha)
      }, o.clone = function(e, t) {
        if (r(e)) return r(t) ? (t.x = e.x, t.y = e.y, t.z = e.z, t.w = e.w, t) : new o(e.x, e.y, e.z, e.w)
      }, o.packedLength = 4, o.pack = function(e, r, n) {
        return n = t(n, 0), r[n++] = e.x, r[n++] = e.y, r[n++] = e.z, r[n] = e.w, r
      }, o.unpack = function(e, n, a) {
        return n = t(n, 0), r(a) || (a = new o), a.x = e[n++], a.y = e[n++], a.z = e[n++], a.w = e[n], a
      }, o.packArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = 4 * n : t = new Array(4 * n);
        for (var a = 0; a < n; ++a) o.pack(e[a], t, 4 * a);
        return t
      }, o.unpackArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = n / 4 : t = new Array(n / 4);
        for (var a = 0; a < n; a += 4) {
          var i = a / 4;
          t[i] = o.unpack(e, a, t[i])
        }
        return t
      }, o.fromArray = o.unpack, o.maximumComponent = function(e) {
        return Math.max(e.x, e.y, e.z, e.w)
      }, o.minimumComponent = function(e) {
        return Math.min(e.x, e.y, e.z, e.w)
      }, o.minimumByComponent = function(e, t, r) {
        return r.x = Math.min(e.x, t.x), r.y = Math.min(e.y, t.y), r.z = Math.min(e.z, t.z), r.w = Math.min(e.w, t
          .w), r
      }, o.maximumByComponent = function(e, t, r) {
        return r.x = Math.max(e.x, t.x), r.y = Math.max(e.y, t.y), r.z = Math.max(e.z, t.z), r.w = Math.max(e.w, t
          .w), r
      }, o.magnitudeSquared = function(e) {
        return e.x * e.x + e.y * e.y + e.z * e.z + e.w * e.w
      }, o.magnitude = function(e) {
        return Math.sqrt(o.magnitudeSquared(e))
      };
      var u = new o;
      o.distance = function(e, t) {
        return o.subtract(e, t, u), o.magnitude(u)
      }, o.distanceSquared = function(e, t) {
        return o.subtract(e, t, u), o.magnitudeSquared(u)
      }, o.normalize = function(e, t) {
        var r = o.magnitude(e);
        return t.x = e.x / r, t.y = e.y / r, t.z = e.z / r,
          t.w = e.w / r, t
      }, o.dot = function(e, t) {
        return e.x * t.x + e.y * t.y + e.z * t.z + e.w * t.w
      }, o.multiplyComponents = function(e, t, r) {
        return r.x = e.x * t.x, r.y = e.y * t.y, r.z = e.z * t.z, r.w = e.w * t.w, r
      }, o.divideComponents = function(e, t, r) {
        return r.x = e.x / t.x, r.y = e.y / t.y, r.z = e.z / t.z, r.w = e.w / t.w, r
      }, o.add = function(e, t, r) {
        return r.x = e.x + t.x, r.y = e.y + t.y, r.z = e.z + t.z, r.w = e.w + t.w, r
      }, o.subtract = function(e, t, r) {
        return r.x = e.x - t.x, r.y = e.y - t.y, r.z = e.z - t.z, r.w = e.w - t.w, r
      }, o.multiplyByScalar = function(e, t, r) {
        return r.x = e.x * t, r.y = e.y * t, r.z = e.z * t, r.w = e.w * t, r
      }, o.divideByScalar = function(e, t, r) {
        return r.x = e.x / t, r.y = e.y / t, r.z = e.z / t, r.w = e.w / t, r
      }, o.negate = function(e, t) {
        return t.x = -e.x, t.y = -e.y, t.z = -e.z, t.w = -e.w, t
      }, o.abs = function(e, t) {
        return t.x = Math.abs(e.x), t.y = Math.abs(e.y), t.z = Math.abs(e.z), t.w = Math.abs(e.w), t
      };
      var s = new o;
      o.lerp = function(e, t, r, n) {
        return o.multiplyByScalar(t, r, s), n = o.multiplyByScalar(e, 1 - r, n), o.add(s, n, n)
      };
      var c = new o;
      o.mostOrthogonalAxis = function(e, t) {
          var r = o.normalize(e, c);
          return o.abs(r, r), t = r.x <= r.y ? r.x <= r.z ? r.x <= r.w ? o.clone(o.UNIT_X, t) : o.clone(o.UNIT_W, t) :
            r.z <= r.w ? o.clone(o.UNIT_Z, t) : o.clone(o.UNIT_W, t) : r.y <= r.z ? r.y <= r.w ? o.clone(o.UNIT_Y,
            t) : o.clone(o.UNIT_W, t) : r.z <= r.w ? o.clone(o.UNIT_Z, t) : o.clone(o.UNIT_W, t)
        }, o.equals = function(e, t) {
          return e === t || r(e) && r(t) && e.x === t.x && e.y === t.y && e.z === t.z && e.w === t.w
        }, o.equalsArray = function(e, t, r) {
          return e.x === t[r] && e.y === t[r + 1] && e.z === t[r + 2] && e.w === t[r + 3]
        }, o.equalsEpsilon = function(e, t, n, a) {
          return e === t || r(e) && r(t) && i.equalsEpsilon(e.x, t.x, n, a) && i.equalsEpsilon(e.y, t.y, n, a) && i
            .equalsEpsilon(e.z, t.z, n, a) && i.equalsEpsilon(e.w, t.w, n, a)
        }, o.ZERO = a(new o(0, 0, 0, 0)), o.UNIT_X = a(new o(1, 0, 0, 0)), o.UNIT_Y = a(new o(0, 1, 0, 0)), o.UNIT_Z =
        a(new o(0, 0, 1, 0)), o.UNIT_W = a(new o(0, 0, 0, 1)), o.prototype.clone = function(e) {
          return o.clone(this, e)
        }, o.prototype.equals = function(e) {
          return o.equals(this, e)
        }, o.prototype.equalsEpsilon = function(e, t, r) {
          return o.equalsEpsilon(this, e, t, r)
        }, o.prototype.toString = function() {
          return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + ")"
        };
      var l = new Float32Array(1);
      return o.packFloat = function(e, t) {
        if (r(t) || (t = new o), l[0] = e, 0 === (e = l[0])) return o.clone(o.ZERO, t);
        var n, a = e < 0 ? 1 : 0;
        isFinite(e) ? (e = Math.abs(e), n = Math.floor(i.logBase(e, 10)) + 1, e /= Math.pow(10, n)) : (e = .1, n =
          38);
        var u = 256 * e;
        return t.x = Math.floor(u), u = 256 * (u - t.x), t.y = Math.floor(u), u = 256 * (u - t.y), t.z = Math.floor(
          u), t.w = 2 * (n + 38) + a, t
      }, o.unpackFloat = function(e) {
        var t = e.w / 2,
          r = Math.floor(t),
          n = 2 * (t - r);
        if (r -= 38, n = 2 * n - 1, n = -n, r >= 38) return n < 0 ? Number.NEGATIVE_INFINITY : Number
          .POSITIVE_INFINITY;
        var a = n * e.x * (1 / 256);
        return a += n * e.y * (1 / 65536), (a += n * e.z * (1 / 16777216)) * Math.pow(10, r)
      }, o
    }), define("Core/RuntimeError", ["./defined"], function(e) {
      "use strict";

      function t(e) {
        this.name = "RuntimeError", this.message = e;
        var t;
        try {
          throw new Error
        } catch (e) {
          t = e.stack
        }
        this.stack = t
      }
      return e(Object.create) && (t.prototype = Object.create(Error.prototype), t.prototype.constructor = t), t
        .prototype.toString = function() {
          var t = this.name + ": " + this.message;
          return e(this.stack) && (t += "\n" + this.stack.toString()), t
        }, t
    }), define("Core/Matrix4", ["./Cartesian3", "./Cartesian4", "./Check", "./defaultValue", "./defined",
      "./defineProperties", "./freezeObject", "./Math", "./Matrix3", "./RuntimeError"
    ], function(e, t, r, n, a, i, o, u, s, c) {
      "use strict";

      function l(e, t, r, a, i, o, u, s, c, l, f, d, h, m, E, p) {
        this[0] = n(e, 0), this[1] = n(i, 0), this[2] = n(c, 0), this[3] = n(h, 0), this[4] = n(t, 0), this[5] = n(o,
          0), this[6] = n(l, 0), this[7] = n(m, 0), this[8] = n(r, 0), this[9] = n(u, 0), this[10] = n(f, 0), this[
          11] = n(E, 0), this[12] = n(a, 0), this[13] = n(s, 0), this[14] = n(d, 0), this[15] = n(p, 0)
      }
      l.packedLength = 16, l.pack = function(e, t, r) {
        return r = n(r, 0), t[r++] = e[0], t[r++] = e[1], t[r++] = e[2], t[r++] = e[3], t[r++] = e[4], t[r++] = e[
          5], t[r++] = e[6], t[r++] = e[7], t[r++] = e[8], t[r++] = e[9], t[r++] = e[10], t[r++] = e[11], t[r++] =
          e[12], t[r++] = e[13], t[r++] = e[14], t[r] = e[15], t
      }, l.unpack = function(e, t, r) {
        return t = n(t, 0), a(r) || (r = new l), r[0] = e[t++], r[1] = e[t++], r[2] = e[t++], r[3] = e[t++], r[4] =
          e[t++], r[5] = e[t++], r[6] = e[t++], r[7] = e[t++], r[8] = e[t++], r[9] = e[t++], r[10] = e[t++], r[11] =
          e[t++], r[12] = e[t++], r[13] = e[t++], r[14] = e[t++], r[15] = e[t], r
      }, l.clone = function(e, t) {
        if (a(e)) return a(t) ? (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t[
          6] = e[6], t[7] = e[7], t[8] = e[8], t[9] = e[9], t[10] = e[10], t[11] = e[11], t[12] = e[12], t[13] =
          e[13], t[14] = e[14], t[15] = e[15], t) : new l(e[0], e[4], e[8], e[12], e[1], e[5], e[9], e[13], e[
          2], e[6], e[10], e[14], e[3], e[7], e[11], e[15])
      }, l.fromArray = l.unpack, l.fromColumnMajorArray = function(e, t) {
        return l.clone(e, t)
      }, l.fromRowMajorArray = function(e, t) {
        return a(t) ? (t[0] = e[0], t[1] = e[4], t[2] = e[8], t[3] = e[12], t[4] = e[1], t[5] = e[5], t[6] = e[9],
          t[7] = e[13], t[8] = e[2], t[9] = e[6], t[10] = e[10], t[11] = e[14], t[12] = e[3], t[13] = e[7], t[
          14] = e[11], t[15] = e[15], t) : new l(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[
          10], e[11], e[12], e[13], e[14], e[15])
      }, l.fromRotationTranslation = function(t, r, i) {
        return r = n(r, e.ZERO), a(i) ? (i[0] = t[0], i[1] = t[1], i[2] = t[2], i[3] = 0, i[4] = t[3], i[5] = t[4],
          i[6] = t[5], i[7] = 0, i[8] = t[6], i[9] = t[7], i[10] = t[8], i[11] = 0, i[12] = r.x, i[13] = r.y, i[
            14] = r.z, i[15] = 1, i) : new l(t[0], t[3], t[6], r.x, t[1], t[4], t[7], r.y, t[2], t[5], t[8], r.z,
          0, 0, 0, 1)
      }, l.fromTranslationQuaternionRotationScale = function(e, t, r, n) {
        a(n) || (n = new l);
        var i = r.x,
          o = r.y,
          u = r.z,
          s = t.x * t.x,
          c = t.x * t.y,
          f = t.x * t.z,
          d = t.x * t.w,
          h = t.y * t.y,
          m = t.y * t.z,
          E = t.y * t.w,
          p = t.z * t.z,
          _ = t.z * t.w,
          y = t.w * t.w,
          T = s - h - p + y,
          R = 2 * (c - _),
          A = 2 * (f + E),
          S = 2 * (c + _),
          v = -s + h - p + y,
          g = 2 * (m - d),
          M = 2 * (f - E),
          N = 2 * (m + d),
          O = -s - h + p + y;
        return n[0] = T * i, n[1] = S * i, n[2] = M * i, n[3] = 0, n[4] = R * o, n[5] = v * o, n[6] = N * o, n[7] =
          0, n[8] = A * u, n[9] = g * u, n[10] = O * u, n[11] = 0, n[12] = e.x, n[13] = e.y, n[14] = e.z, n[15] = 1,
          n
      }, l.fromTranslationRotationScale = function(e, t) {
        return l.fromTranslationQuaternionRotationScale(e.translation, e.rotation, e.scale, t)
      }, l.fromTranslation = function(e, t) {
        return l.fromRotationTranslation(s.IDENTITY, e, t)
      }, l.fromScale = function(e, t) {
        return a(t) ? (t[0] = e.x, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = e.y, t[6] = 0, t[7] = 0, t[8] = 0,
          t[9] = 0, t[10] = e.z, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t) : new l(e.x, 0, 0, 0,
          0, e.y, 0, 0, 0, 0, e.z, 0, 0, 0, 0, 1)
      }, l.fromUniformScale = function(e, t) {
        return a(t) ? (t[0] = e, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = e, t[6] = 0, t[7] = 0, t[8] = 0, t[
          9] = 0, t[10] = e, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, t) : new l(e, 0, 0, 0, 0, e,
          0, 0, 0, 0, e, 0, 0, 0, 0, 1)
      };
      var f = new e,
        d = new e,
        h = new e;
      l.fromCamera = function(t, r) {
        var n = t.position,
          i = t.direction,
          o = t.up;
        e.normalize(i, f), e.normalize(e.cross(f, o, d), d), e.normalize(e.cross(d, f, h), h);
        var u = d.x,
          s = d.y,
          c = d.z,
          m = f.x,
          E = f.y,
          p = f.z,
          _ = h.x,
          y = h.y,
          T = h.z,
          R = n.x,
          A = n.y,
          S = n.z,
          v = u * -R + s * -A + c * -S,
          g = _ * -R + y * -A + T * -S,
          M = m * R + E * A + p * S;
        return a(r) ? (r[0] = u, r[1] = _, r[2] = -m, r[3] = 0, r[4] = s, r[5] = y, r[6] = -E, r[7] = 0, r[8] = c,
          r[9] = T, r[10] = -p, r[11] = 0, r[12] = v, r[13] = g, r[14] = M, r[15] = 1, r) : new l(u, s, c, v, _,
          y, T, g, -m, -E, -p, M, 0, 0, 0, 1)
      }, l.computePerspectiveFieldOfView = function(e, t, r, n, a) {
        var i = Math.tan(.5 * e),
          o = 1 / i,
          u = o / t,
          s = (n + r) / (r - n),
          c = 2 * n * r / (r - n);
        return a[0] = u, a[1] = 0, a[2] = 0, a[3] = 0, a[4] = 0, a[5] = o, a[6] = 0, a[7] = 0, a[8] = 0, a[9] = 0,
          a[10] = s, a[11] = -1, a[12] = 0, a[13] = 0, a[14] = c, a[15] = 0, a
      }, l.computeOrthographicOffCenter = function(e, t, r, n, a, i, o) {
        var u = 1 / (t - e),
          s = 1 / (n - r),
          c = 1 / (i - a),
          l = -(t + e) * u,
          f = -(n + r) * s,
          d = -(i + a) * c;
        return u *= 2, s *= 2, c *= -2, o[0] = u, o[1] = 0, o[2] = 0, o[3] = 0, o[4] = 0, o[5] = s, o[6] = 0, o[7] =
          0, o[8] = 0, o[9] = 0, o[10] = c, o[11] = 0, o[12] = l, o[13] = f, o[14] = d, o[15] = 1, o
      }, l.computePerspectiveOffCenter = function(e, t, r, n, a, i, o) {
        var u = 2 * a / (t - e),
          s = 2 * a / (n - r),
          c = (t + e) / (t - e),
          l = (n + r) / (n - r),
          f = -(i + a) / (i - a),
          d = -2 * i * a / (i - a);
        return o[0] = u, o[1] = 0, o[2] = 0, o[3] = 0, o[4] = 0, o[5] = s, o[6] = 0, o[7] = 0, o[8] = c, o[9] = l,
          o[10] = f, o[11] = -1, o[12] = 0, o[13] = 0, o[14] = d, o[15] = 0, o
      }, l.computeInfinitePerspectiveOffCenter = function(e, t, r, n, a, i) {
        var o = 2 * a / (t - e),
          u = 2 * a / (n - r),
          s = (t + e) / (t - e),
          c = (n + r) / (n - r),
          l = -2 * a;
        return i[0] = o, i[1] = 0, i[2] = 0, i[3] = 0, i[4] = 0, i[5] = u, i[6] = 0, i[7] = 0, i[8] = s, i[9] = c,
          i[10] = -1, i[11] = -1, i[12] = 0, i[13] = 0, i[14] = l, i[15] = 0, i
      }, l.computeViewportTransformation = function(e, t, r, a) {
        e = n(e, n.EMPTY_OBJECT);
        var i = n(e.x, 0),
          o = n(e.y, 0),
          u = n(e.width, 0),
          s = n(e.height, 0);
        t = n(t, 0), r = n(r, 1);
        var c = .5 * u,
          l = .5 * s,
          f = .5 * (r - t),
          d = c,
          h = l,
          m = f,
          E = i + c,
          p = o + l,
          _ = t + f;
        return a[0] = d, a[1] = 0, a[2] = 0, a[3] = 0, a[4] = 0, a[5] = h, a[6] = 0, a[7] = 0, a[8] = 0, a[9] = 0,
          a[10] = m, a[11] = 0, a[12] = E, a[13] = p, a[14] = _, a[15] = 1, a
      }, l.computeView = function(t, r, n, a, i) {
        return i[0] = a.x, i[1] = n.x, i[2] = -r.x, i[3] = 0, i[4] = a.y, i[5] = n.y, i[6] = -r.y, i[7] = 0, i[8] =
          a.z, i[9] = n.z, i[10] = -r.z, i[11] = 0, i[12] = -e.dot(a, t), i[13] = -e.dot(n, t), i[14] = e.dot(r, t),
          i[15] = 1, i
      }, l.toArray = function(e, t) {
        return a(t) ? (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t[6] = e[6], t[
            7] = e[7], t[8] = e[8], t[9] = e[9], t[10] = e[10], t[11] = e[11], t[12] = e[12], t[13] = e[13], t[
          14] = e[14], t[15] = e[15], t) : [e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[
          11], e[12], e[13], e[14], e[15]]
      }, l.getElementIndex = function(e, t) {
        return 4 * e + t
      }, l.getColumn = function(e, t, r) {
        var n = 4 * t,
          a = e[n],
          i = e[n + 1],
          o = e[n + 2],
          u = e[n + 3];
        return r.x = a, r.y = i, r.z = o, r.w = u, r
      }, l.setColumn = function(e, t, r, n) {
        n = l.clone(e, n);
        var a = 4 * t;
        return n[a] = r.x, n[a + 1] = r.y, n[a + 2] = r.z, n[a + 3] = r.w, n
      }, l.setTranslation = function(e, t, r) {
        return r[0] = e[0], r[1] = e[1], r[2] = e[2], r[3] = e[3], r[4] = e[4], r[5] = e[5], r[6] = e[6], r[7] = e[
            7], r[8] = e[8], r[9] = e[9], r[10] = e[10], r[11] = e[11], r[12] = t.x, r[13] = t.y, r[14] = t.z, r[
          15] = e[15], r
      }, l.getRow = function(e, t, r) {
        var n = e[t],
          a = e[t + 4],
          i = e[t + 8],
          o = e[t + 12];
        return r.x = n, r.y = a, r.z = i, r.w = o, r
      }, l.setRow = function(e, t, r, n) {
        return n = l.clone(e, n), n[t] = r.x, n[t + 4] = r.y, n[t + 8] = r.z, n[t + 12] = r.w, n
      };
      var m = new e;
      l.getScale = function(t, r) {
        return r.x = e.magnitude(e.fromElements(t[0], t[1], t[2], m)), r.y = e.magnitude(e.fromElements(t[4], t[5],
          t[6], m)), r.z = e.magnitude(e.fromElements(t[8], t[9], t[10], m)), r
      };
      var E = new e;
      l.getMaximumScale = function(t) {
        return l.getScale(t, E), e.maximumComponent(E)
      }, l.multiply = function(e, t, r) {
        var n = e[0],
          a = e[1],
          i = e[2],
          o = e[3],
          u = e[4],
          s = e[5],
          c = e[6],
          l = e[7],
          f = e[8],
          d = e[9],
          h = e[10],
          m = e[11],
          E = e[12],
          p = e[13],
          _ = e[14],
          y = e[15],
          T = t[0],
          R = t[1],
          A = t[2],
          S = t[3],
          v = t[4],
          g = t[5],
          M = t[6],
          N = t[7],
          O = t[8],
          I = t[9],
          w = t[10],
          C = t[11],
          x = t[12],
          P = t[13],
          U = t[14],
          D = t[15],
          L = n * T + u * R + f * A + E * S,
          F = a * T + s * R + d * A + p * S,
          b = i * T + c * R + h * A + _ * S,
          B = o * T + l * R + m * A + y * S,
          z = n * v + u * g + f * M + E * N,
          q = a * v + s * g + d * M + p * N,
          G = i * v + c * g + h * M + _ * N,
          V = o * v + l * g + m * M + y * N,
          W = n * O + u * I + f * w + E * C,
          X = a * O + s * I + d * w + p * C,
          H = i * O + c * I + h * w + _ * C,
          k = o * O + l * I + m * w + y * C,
          Y = n * x + u * P + f * U + E * D,
          j = a * x + s * P + d * U + p * D,
          Z = i * x + c * P + h * U + _ * D,
          K = o * x + l * P + m * U + y * D;
        return r[0] = L, r[1] = F, r[2] = b, r[3] = B, r[4] = z, r[5] = q, r[6] = G, r[7] = V, r[8] = W, r[9] = X,
          r[10] = H, r[11] = k, r[12] = Y, r[13] = j, r[14] = Z, r[15] = K, r
      }, l.add = function(e, t, r) {
        return r[0] = e[0] + t[0], r[1] = e[1] + t[1], r[2] = e[2] + t[2], r[3] = e[3] + t[3], r[4] = e[4] + t[4],
          r[5] = e[5] + t[5], r[6] = e[6] + t[6], r[7] = e[7] + t[7], r[8] = e[8] + t[8], r[9] = e[9] + t[9], r[
          10] = e[10] + t[10], r[11] = e[11] + t[11], r[12] = e[12] + t[12], r[13] = e[13] + t[13], r[14] = e[14] +
          t[14], r[15] = e[15] + t[15], r
      }, l.subtract = function(e, t, r) {
        return r[0] = e[0] - t[0], r[1] = e[1] - t[1], r[2] = e[2] - t[2], r[3] = e[3] - t[3], r[4] = e[4] - t[4],
          r[5] = e[5] - t[5], r[6] = e[6] - t[6], r[7] = e[7] - t[7], r[8] = e[8] - t[8], r[9] = e[9] - t[9], r[
          10] = e[10] - t[10], r[11] = e[11] - t[11], r[12] = e[12] - t[12], r[13] = e[13] - t[13], r[14] = e[14] -
          t[14], r[15] = e[15] - t[15], r
      }, l.multiplyTransformation = function(e, t, r) {
        var n = e[0],
          a = e[1],
          i = e[2],
          o = e[4],
          u = e[5],
          s = e[6],
          c = e[8],
          l = e[9],
          f = e[10],
          d = e[12],
          h = e[13],
          m = e[14],
          E = t[0],
          p = t[1],
          _ = t[2],
          y = t[4],
          T = t[5],
          R = t[6],
          A = t[8],
          S = t[9],
          v = t[10],
          g = t[12],
          M = t[13],
          N = t[14],
          O = n * E + o * p + c * _,
          I = a * E + u * p + l * _,
          w = i * E + s * p + f * _,
          C = n * y + o * T + c * R,
          x = a * y + u * T + l * R,
          P = i * y + s * T + f * R,
          U = n * A + o * S + c * v,
          D = a * A + u * S + l * v,
          L = i * A + s * S + f * v,
          F = n * g + o * M + c * N + d,
          b = a * g + u * M + l * N + h,
          B = i * g + s * M + f * N + m;
        return r[0] = O, r[1] = I, r[2] = w, r[3] = 0, r[4] = C, r[5] = x, r[6] = P, r[7] = 0, r[8] = U, r[9] = D,
          r[10] = L, r[11] = 0, r[12] = F, r[13] = b, r[14] = B, r[15] = 1, r
      }, l.multiplyByMatrix3 = function(e, t, r) {
        var n = e[0],
          a = e[1],
          i = e[2],
          o = e[4],
          u = e[5],
          s = e[6],
          c = e[8],
          l = e[9],
          f = e[10],
          d = t[0],
          h = t[1],
          m = t[2],
          E = t[3],
          p = t[4],
          _ = t[5],
          y = t[6],
          T = t[7],
          R = t[8],
          A = n * d + o * h + c * m,
          S = a * d + u * h + l * m,
          v = i * d + s * h + f * m,
          g = n * E + o * p + c * _,
          M = a * E + u * p + l * _,
          N = i * E + s * p + f * _,
          O = n * y + o * T + c * R,
          I = a * y + u * T + l * R,
          w = i * y + s * T + f * R;
        return r[0] = A, r[1] = S, r[2] = v, r[3] = 0, r[4] = g, r[5] = M, r[6] = N, r[7] = 0, r[8] = O, r[9] = I,
          r[10] = w, r[11] = 0, r[12] = e[12], r[13] = e[13], r[14] = e[14], r[15] = e[15], r
      }, l.multiplyByTranslation = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z,
          o = n * e[0] + a * e[4] + i * e[8] + e[12],
          u = n * e[1] + a * e[5] + i * e[9] + e[13],
          s = n * e[2] + a * e[6] + i * e[10] + e[14];
        return r[0] = e[0], r[1] = e[1], r[2] = e[2], r[3] = e[3], r[4] = e[4], r[5] = e[5], r[6] = e[6], r[7] = e[
          7], r[8] = e[8], r[9] = e[9], r[10] = e[10], r[11] = e[11], r[12] = o, r[13] = u, r[14] = s, r[15] = e[
          15], r
      };
      var p = new e;
      l.multiplyByUniformScale = function(e, t, r) {
        return p.x = t, p.y = t, p.z = t, l.multiplyByScale(e, p, r)
      }, l.multiplyByScale = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z;
        return 1 === n && 1 === a && 1 === i ? l.clone(e, r) : (r[0] = n * e[0], r[1] = n * e[1], r[2] = n * e[2],
          r[3] = 0, r[4] = a * e[4], r[5] = a * e[5], r[6] = a * e[6], r[7] = 0, r[8] = i * e[8], r[9] = i * e[9],
          r[10] = i * e[10], r[11] = 0, r[12] = e[12], r[13] = e[13], r[14] = e[14], r[15] = 1, r)
      }, l.multiplyByVector = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z,
          o = t.w,
          u = e[0] * n + e[4] * a + e[8] * i + e[12] * o,
          s = e[1] * n + e[5] * a + e[9] * i + e[13] * o,
          c = e[2] * n + e[6] * a + e[10] * i + e[14] * o,
          l = e[3] * n + e[7] * a + e[11] * i + e[15] * o;
        return r.x = u, r.y = s, r.z = c, r.w = l, r
      }, l.multiplyByPointAsVector = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z,
          o = e[0] * n + e[4] * a + e[8] * i,
          u = e[1] * n + e[5] * a + e[9] * i,
          s = e[2] * n + e[6] * a + e[10] * i;
        return r.x = o, r.y = u, r.z = s, r
      }, l.multiplyByPoint = function(e, t, r) {
        var n = t.x,
          a = t.y,
          i = t.z,
          o = e[0] * n + e[4] * a + e[8] * i + e[12],
          u = e[1] * n + e[5] * a + e[9] * i + e[13],
          s = e[2] * n + e[6] * a + e[10] * i + e[14];
        return r.x = o, r.y = u, r.z = s, r
      }, l.multiplyByScalar = function(e, t, r) {
        return r[0] = e[0] * t, r[1] = e[1] * t, r[2] = e[2] * t, r[3] = e[3] * t, r[4] = e[4] * t, r[5] = e[5] * t,
          r[6] = e[6] * t, r[7] = e[7] * t, r[8] = e[8] * t, r[9] = e[9] * t, r[10] = e[10] * t, r[11] = e[11] * t,
          r[12] = e[12] * t, r[13] = e[13] * t, r[14] = e[14] * t, r[15] = e[15] * t, r
      }, l.negate = function(e, t) {
        return t[0] = -e[0], t[1] = -e[1], t[2] = -e[2], t[3] = -e[3], t[4] = -e[4], t[5] = -e[5], t[6] = -e[6], t[
            7] = -e[7], t[8] = -e[8], t[9] = -e[9], t[10] = -e[10], t[11] = -e[11], t[12] = -e[12], t[13] = -e[13],
          t[14] = -e[14], t[15] = -e[15], t
      }, l.transpose = function(e, t) {
        var r = e[1],
          n = e[2],
          a = e[3],
          i = e[6],
          o = e[7],
          u = e[11];
        return t[0] = e[0], t[1] = e[4], t[2] = e[8], t[3] = e[12], t[4] = r, t[5] = e[5], t[6] = e[9], t[7] = e[
          13], t[8] = n, t[9] = i, t[10] = e[10], t[11] = e[14], t[12] = a, t[13] = o, t[14] = u, t[15] = e[15], t
      }, l.abs = function(e, t) {
        return t[0] = Math.abs(e[0]), t[1] = Math.abs(e[1]), t[2] = Math.abs(e[2]), t[3] = Math.abs(e[3]), t[4] =
          Math.abs(e[4]), t[5] = Math.abs(e[5]), t[6] = Math.abs(e[6]), t[7] = Math.abs(e[7]), t[8] = Math.abs(e[
          8]), t[9] = Math.abs(e[9]), t[10] = Math.abs(e[10]), t[11] = Math.abs(e[11]), t[12] = Math.abs(e[12]), t[
            13] = Math.abs(e[13]), t[14] = Math.abs(e[14]), t[15] = Math.abs(e[15]), t
      }, l.equals = function(e, t) {
        return e === t || a(e) && a(t) && e[12] === t[12] && e[13] === t[13] && e[14] === t[14] && e[0] === t[0] &&
          e[1] === t[1] && e[2] === t[2] && e[4] === t[4] && e[5] === t[5] && e[6] === t[6] && e[8] === t[8] && e[
          9] === t[9] && e[10] === t[10] && e[3] === t[3] && e[7] === t[7] && e[11] === t[11] && e[15] === t[15]
      }, l.equalsEpsilon = function(e, t, r) {
        return e === t || a(e) && a(t) && Math.abs(e[0] - t[0]) <= r && Math.abs(e[1] - t[1]) <= r && Math.abs(e[
            2] - t[2]) <= r && Math.abs(e[3] - t[3]) <= r && Math.abs(e[4] - t[4]) <= r && Math.abs(e[5] - t[5]) <=
          r && Math.abs(e[6] - t[6]) <= r && Math.abs(e[7] - t[7]) <= r && Math.abs(e[8] - t[8]) <= r && Math.abs(e[
            9] - t[9]) <= r && Math.abs(e[10] - t[10]) <= r && Math.abs(e[11] - t[11]) <= r && Math.abs(e[12] - t[
            12]) <= r && Math.abs(e[13] - t[13]) <= r && Math.abs(e[14] - t[14]) <= r && Math.abs(e[15] - t[15]) <=
          r
      }, l.getTranslation = function(e, t) {
        return t.x = e[12], t.y = e[13], t.z = e[14], t
      }, l.getRotation = function(e, t) {
        return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[4], t[4] = e[5], t[5] = e[6], t[6] = e[8], t[7] = e[
          9], t[8] = e[10], t
      };
      var _ = new s,
        y = new s,
        T = new t,
        R = new t(0, 0, 0, 1);
      return l.inverse = function(e, r) {
          if (s.equalsEpsilon(l.getRotation(e, _), y, u.EPSILON7) && t.equals(l.getRow(e, 3, T), R)) return r[0] = 0,
            r[1] = 0, r[2] = 0, r[3] = 0, r[4] = 0, r[5] = 0, r[6] = 0, r[7] = 0, r[8] = 0, r[9] = 0, r[10] = 0, r[
              11] = 0, r[12] = -e[12], r[13] = -e[13], r[14] = -e[14], r[15] = 1, r;
          var n = e[0],
            a = e[4],
            i = e[8],
            o = e[12],
            f = e[1],
            d = e[5],
            h = e[9],
            m = e[13],
            E = e[2],
            p = e[6],
            A = e[10],
            S = e[14],
            v = e[3],
            g = e[7],
            M = e[11],
            N = e[15],
            O = A * N,
            I = S * M,
            w = p * N,
            C = S * g,
            x = p * M,
            P = A * g,
            U = E * N,
            D = S * v,
            L = E * M,
            F = A * v,
            b = E * g,
            B = p * v,
            z = O * d + C * h + x * m - (I * d + w * h + P * m),
            q = I * f + U * h + F * m - (O * f + D * h + L * m),
            G = w * f + D * d + b * m - (C * f + U * d + B * m),
            V = P * f + L * d + B * h - (x * f + F * d + b * h),
            W = I * a + w * i + P * o - (O * a + C * i + x * o),
            X = O * n + D * i + L * o - (I * n + U * i + F * o),
            H = C * n + U * a + B * o - (w * n + D * a + b * o),
            k = x * n + F * a + b * i - (P * n + L * a + B * i);
          O = i * m, I = o * h, w = a * m, C = o * d, x = a * h, P = i * d, U = n * m, D = o * f, L = n * h, F = i *
            f, b = n * d, B = a * f;
          var Y = O * g + C * M + x * N - (I * g + w * M + P * N),
            j = I * v + U * M + F * N - (O * v + D * M + L * N),
            Z = w * v + D * g + b * N - (C * v + U * g + B * N),
            K = P * v + L * g + B * M - (x * v + F * g + b * M),
            J = w * A + P * S + I * p - (x * S + O * p + C * A),
            Q = L * S + O * E + D * A - (U * A + F * S + I * E),
            $ = U * p + B * S + C * E - (b * S + w * E + D * p),
            ee = b * A + x * E + F * p - (L * p + B * A + P * E),
            te = n * z + a * q + i * G + o * V;
          if (Math.abs(te) < u.EPSILON20) throw new c("matrix is not invertible because its determinate is zero.");
          return te = 1 / te, r[0] = z * te, r[1] = q * te, r[2] = G * te, r[3] = V * te, r[4] = W * te, r[5] = X *
            te, r[6] = H * te, r[7] = k * te, r[8] = Y * te, r[9] = j * te, r[10] = Z * te, r[11] = K * te, r[12] =
            J * te, r[13] = Q * te, r[14] = $ * te, r[15] = ee * te, r
        }, l.inverseTransformation = function(e, t) {
          var r = e[0],
            n = e[1],
            a = e[2],
            i = e[4],
            o = e[5],
            u = e[6],
            s = e[8],
            c = e[9],
            l = e[10],
            f = e[12],
            d = e[13],
            h = e[14],
            m = -r * f - n * d - a * h,
            E = -i * f - o * d - u * h,
            p = -s * f - c * d - l * h;
          return t[0] = r, t[1] = i, t[2] = s, t[3] = 0, t[4] = n, t[5] = o, t[6] = c, t[7] = 0, t[8] = a, t[9] = u,
            t[10] = l, t[11] = 0, t[12] = m, t[13] = E, t[14] = p, t[15] = 1, t
        }, l.IDENTITY = o(new l(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)), l.ZERO = o(new l(0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), l.COLUMN0ROW0 = 0, l.COLUMN0ROW1 = 1, l.COLUMN0ROW2 = 2, l.COLUMN0ROW3 = 3,
        l.COLUMN1ROW0 = 4, l.COLUMN1ROW1 = 5, l.COLUMN1ROW2 = 6, l.COLUMN1ROW3 = 7, l.COLUMN2ROW0 = 8, l.COLUMN2ROW1 =
        9, l.COLUMN2ROW2 = 10, l.COLUMN2ROW3 = 11, l.COLUMN3ROW0 = 12, l.COLUMN3ROW1 = 13, l.COLUMN3ROW2 = 14, l
        .COLUMN3ROW3 = 15, i(l.prototype, {
          length: {
            get: function() {
              return l.packedLength
            }
          }
        }), l.prototype.clone = function(e) {
          return l.clone(this, e)
        }, l.prototype.equals = function(e) {
          return l.equals(this, e)
        }, l.equalsArray = function(e, t, r) {
          return e[0] === t[r] && e[1] === t[r + 1] && e[2] === t[r + 2] && e[3] === t[r + 3] && e[4] === t[r + 4] &&
            e[5] === t[r + 5] && e[6] === t[r + 6] && e[7] === t[r + 7] && e[8] === t[r + 8] && e[9] === t[r + 9] &&
            e[10] === t[r + 10] && e[11] === t[r + 11] && e[12] === t[r + 12] && e[13] === t[r + 13] && e[14] === t[
              r + 14] && e[15] === t[r + 15]
        }, l.prototype.equalsEpsilon = function(e, t) {
          return l.equalsEpsilon(this, e, t)
        }, l.prototype.toString = function() {
          return "(" + this[0] + ", " + this[4] + ", " + this[8] + ", " + this[12] + ")\n(" + this[1] + ", " + this[
            5] + ", " + this[9] + ", " + this[13] + ")\n(" + this[2] + ", " + this[6] + ", " + this[10] + ", " + this[
              14] + ")\n(" + this[3] + ", " + this[7] + ", " + this[11] + ", " + this[15] + ")"
        }, l
    }), define("Core/Rectangle", ["./Cartographic", "./Check", "./defaultValue", "./defined", "./defineProperties",
      "./Ellipsoid", "./freezeObject", "./Math"
    ], function(e, t, r, n, a, i, o, u) {
      "use strict";

      function s(e, t, n, a) {
        this.west = r(e, 0), this.south = r(t, 0), this.east = r(n, 0), this.north = r(a, 0)
      }
      a(s.prototype, {
        width: {
          get: function() {
            return s.computeWidth(this)
          }
        },
        height: {
          get: function() {
            return s.computeHeight(this)
          }
        }
      }), s.packedLength = 4, s.pack = function(e, t, n) {
        return n = r(n, 0), t[n++] = e.west, t[n++] = e.south, t[n++] = e.east, t[n] = e.north, t
      }, s.unpack = function(e, t, a) {
        return t = r(t, 0), n(a) || (a = new s), a.west = e[t++], a.south = e[t++], a.east = e[t++], a.north = e[t],
          a
      }, s.computeWidth = function(e) {
        var t = e.east,
          r = e.west;
        return t < r && (t += u.TWO_PI), t - r
      }, s.computeHeight = function(e) {
        return e.north - e.south
      }, s.fromDegrees = function(e, t, a, i, o) {
        return e = u.toRadians(r(e, 0)), t = u.toRadians(r(t, 0)), a = u.toRadians(r(a, 0)), i = u.toRadians(r(i,
          0)), n(o) ? (o.west = e, o.south = t, o.east = a, o.north = i, o) : new s(e, t, a, i)
      }, s.fromRadians = function(e, t, a, i, o) {
        return n(o) ? (o.west = r(e, 0), o.south = r(t, 0), o.east = r(a, 0), o.north = r(i, 0), o) : new s(e, t, a,
          i)
      }, s.fromCartographicArray = function(e, t) {
        for (var r = Number.MAX_VALUE, a = -Number.MAX_VALUE, i = Number.MAX_VALUE, o = -Number.MAX_VALUE, c =
            Number.MAX_VALUE, l = -Number.MAX_VALUE, f = 0, d = e.length; f < d; f++) {
          var h = e[f];
          r = Math.min(r, h.longitude), a = Math.max(a, h.longitude), c = Math.min(c, h.latitude), l = Math.max(l, h
            .latitude);
          var m = h.longitude >= 0 ? h.longitude : h.longitude + u.TWO_PI;
          i = Math.min(i, m), o = Math.max(o, m)
        }
        return a - r > o - i && (r = i, a = o, a > u.PI && (a -= u.TWO_PI), r > u.PI && (r -= u.TWO_PI)), n(t) ? (t
          .west = r, t.south = c, t.east = a, t.north = l, t) : new s(r, c, a, l)
      }, s.fromCartesianArray = function(e, t, a) {
        t = r(t, i.WGS84);
        for (var o = Number.MAX_VALUE, c = -Number.MAX_VALUE, l = Number.MAX_VALUE, f = -Number.MAX_VALUE, d =
            Number.MAX_VALUE, h = -Number.MAX_VALUE, m = 0, E = e.length; m < E; m++) {
          var p = t.cartesianToCartographic(e[m]);
          o = Math.min(o, p.longitude), c = Math.max(c, p.longitude), d = Math.min(d, p.latitude), h = Math.max(h, p
            .latitude);
          var _ = p.longitude >= 0 ? p.longitude : p.longitude + u.TWO_PI;
          l = Math.min(l, _), f = Math.max(f, _)
        }
        return c - o > f - l && (o = l, c = f, c > u.PI && (c -= u.TWO_PI), o > u.PI && (o -= u.TWO_PI)), n(a) ? (a
          .west = o, a.south = d, a.east = c, a.north = h, a) : new s(o, d, c, h)
      }, s.clone = function(e, t) {
        if (n(e)) return n(t) ? (t.west = e.west, t.south = e.south, t.east = e.east, t.north = e.north, t) : new s(
          e.west, e.south, e.east, e.north)
      }, s.equalsEpsilon = function(e, t, r) {
        return e === t || n(e) && n(t) && Math.abs(e.west - t.west) <= r && Math.abs(e.south - t.south) <= r && Math
          .abs(e.east - t.east) <= r && Math.abs(e.north - t.north) <= r
      }, s.prototype.clone = function(e) {
        return s.clone(this, e)
      }, s.prototype.equals = function(e) {
        return s.equals(this, e)
      }, s.equals = function(e, t) {
        return e === t || n(e) && n(t) && e.west === t.west && e.south === t.south && e.east === t.east && e
          .north === t.north
      }, s.prototype.equalsEpsilon = function(e, t) {
        return s.equalsEpsilon(this, e, t)
      }, s.validate = function(e) {}, s.southwest = function(t, r) {
        return n(r) ? (r.longitude = t.west, r.latitude = t.south, r.height = 0, r) : new e(t.west, t.south)
      }, s.northwest = function(t, r) {
        return n(r) ? (r.longitude = t.west, r.latitude = t.north, r.height = 0, r) : new e(t.west, t.north)
      }, s.northeast = function(t, r) {
        return n(r) ? (r.longitude = t.east, r.latitude = t.north, r.height = 0, r) : new e(t.east, t.north)
      }, s.southeast = function(t, r) {
        return n(r) ? (r.longitude = t.east, r.latitude = t.south, r.height = 0, r) : new e(t.east, t.south)
      }, s.center = function(t, r) {
        var a = t.east,
          i = t.west;
        a < i && (a += u.TWO_PI);
        var o = u.negativePiToPi(.5 * (i + a)),
          s = .5 * (t.south + t.north);
        return n(r) ? (r.longitude = o, r.latitude = s, r.height = 0, r) : new e(o, s)
      }, s.intersection = function(e, t, r) {
        var a = e.east,
          i = e.west,
          o = t.east,
          c = t.west;
        a < i && o > 0 ? a += u.TWO_PI : o < c && a > 0 && (o += u.TWO_PI), a < i && c < 0 ? c += u.TWO_PI : o <
          c && i < 0 && (i += u.TWO_PI);
        var l = u.negativePiToPi(Math.max(i, c)),
          f = u.negativePiToPi(Math.min(a, o));
        if (!((e.west < e.east || t.west < t.east) && f <= l)) {
          var d = Math.max(e.south, t.south),
            h = Math.min(e.north, t.north);
          if (!(d >= h)) return n(r) ? (r.west = l, r.south = d, r.east = f, r.north = h, r) : new s(l, d, f, h)
        }
      }, s.simpleIntersection = function(e, t, r) {
        var a = Math.max(e.west, t.west),
          i = Math.max(e.south, t.south),
          o = Math.min(e.east, t.east),
          u = Math.min(e.north, t.north);
        if (!(i >= u || a >= o)) return n(r) ? (r.west = a, r.south = i, r.east = o, r.north = u, r) : new s(a, i,
          o, u)
      }, s.union = function(e, t, r) {
        n(r) || (r = new s);
        var a = e.east,
          i = e.west,
          o = t.east,
          c = t.west;
        a < i && o > 0 ? a += u.TWO_PI : o < c && a > 0 && (o += u.TWO_PI), a < i && c < 0 ? c += u.TWO_PI : o <
          c && i < 0 && (i += u.TWO_PI);
        var l = u.convertLongitudeRange(Math.min(i, c)),
          f = u.convertLongitudeRange(Math.max(a, o));
        return r.west = l, r.south = Math.min(e.south, t.south), r.east = f, r.north = Math.max(e.north, t.north), r
      }, s.expand = function(e, t, r) {
        return n(r) || (r = new s), r.west = Math.min(e.west, t.longitude), r.south = Math.min(e.south, t.latitude),
          r.east = Math.max(e.east, t.longitude), r.north = Math.max(e.north, t.latitude), r
      }, s.contains = function(e, t) {
        var r = t.longitude,
          n = t.latitude,
          a = e.west,
          i = e.east;
        return i < a && (i += u.TWO_PI, r < 0 && (r += u.TWO_PI)), (r > a || u.equalsEpsilon(r, a, u.EPSILON14)) &&
          (r < i || u.equalsEpsilon(r, i, u.EPSILON14)) && n >= e.south && n <= e.north
      };
      var c = new e;
      return s.subsample = function(e, t, a, o) {
        t = r(t, i.WGS84), a = r(a, 0), n(o) || (o = []);
        var l = 0,
          f = e.north,
          d = e.south,
          h = e.east,
          m = e.west,
          E = c;
        E.height = a, E.longitude = m, E.latitude = f, o[l] = t.cartographicToCartesian(E, o[l]), l++, E.longitude =
          h, o[l] = t.cartographicToCartesian(E, o[l]), l++, E.latitude = d, o[l] = t.cartographicToCartesian(E, o[
            l]), l++, E.longitude = m, o[l] = t.cartographicToCartesian(E, o[l]), l++, E.latitude = f < 0 ? f : d >
          0 ? d : 0;
        for (var p = 1; p < 8; ++p) E.longitude = -Math.PI + p * u.PI_OVER_TWO, s.contains(e, E) && (o[l] = t
          .cartographicToCartesian(E, o[l]), l++);
        return 0 === E.latitude && (E.longitude = m, o[l] = t.cartographicToCartesian(E, o[l]), l++, E.longitude =
          h, o[l] = t.cartographicToCartesian(E, o[l]), l++), o.length = l, o
      }, s.MAX_VALUE = o(new s(-Math.PI, -u.PI_OVER_TWO, Math.PI, u.PI_OVER_TWO)), s
    }), define("Core/BoundingSphere", ["./Cartesian3", "./Cartographic", "./Check", "./defaultValue", "./defined",
      "./Ellipsoid", "./GeographicProjection", "./Intersect", "./Interval", "./Math", "./Matrix3", "./Matrix4",
      "./Rectangle"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d) {
      "use strict";

      function h(t, r) {
        this.center = e.clone(n(t, e.ZERO)), this.radius = n(r, 0)
      }
      var m = new e,
        E = new e,
        p = new e,
        _ = new e,
        y = new e,
        T = new e,
        R = new e,
        A = new e,
        S = new e,
        v = new e,
        g = new e,
        M = new e,
        N = 4 / 3 * c.PI;
      h.fromPoints = function(t, r) {
        if (a(r) || (r = new h), !a(t) || 0 === t.length) return r.center = e.clone(e.ZERO, r.center), r.radius = 0,
          r;
        var n, i = e.clone(t[0], R),
          o = e.clone(i, m),
          u = e.clone(i, E),
          s = e.clone(i, p),
          c = e.clone(i, _),
          l = e.clone(i, y),
          f = e.clone(i, T),
          d = t.length;
        for (n = 1; n < d; n++) {
          e.clone(t[n], i);
          var N = i.x,
            O = i.y,
            I = i.z;
          N < o.x && e.clone(i, o), N > c.x && e.clone(i, c), O < u.y && e.clone(i, u), O > l.y && e.clone(i, l),
            I < s.z && e.clone(i, s), I > f.z && e.clone(i, f)
        }
        var w = e.magnitudeSquared(e.subtract(c, o, A)),
          C = e.magnitudeSquared(e.subtract(l, u, A)),
          x = e.magnitudeSquared(e.subtract(f, s, A)),
          P = o,
          U = c,
          D = w;
        C > D && (D = C, P = u, U = l), x > D && (D = x, P = s, U = f);
        var L = S;
        L.x = .5 * (P.x + U.x), L.y = .5 * (P.y + U.y), L.z = .5 * (P.z + U.z);
        var F = e.magnitudeSquared(e.subtract(U, L, A)),
          b = Math.sqrt(F),
          B = v;
        B.x = o.x, B.y = u.y, B.z = s.z;
        var z = g;
        z.x = c.x, z.y = l.y, z.z = f.z;
        var q = e.multiplyByScalar(e.add(B, z, A), .5, M),
          G = 0;
        for (n = 0; n < d; n++) {
          e.clone(t[n], i);
          var V = e.magnitude(e.subtract(i, q, A));
          V > G && (G = V);
          var W = e.magnitudeSquared(e.subtract(i, L, A));
          if (W > F) {
            var X = Math.sqrt(W);
            b = .5 * (b + X), F = b * b;
            var H = X - b;
            L.x = (b * L.x + H * i.x) / X, L.y = (b * L.y + H * i.y) / X, L.z = (b * L.z + H * i.z) / X
          }
        }
        return b < G ? (e.clone(L, r.center), r.radius = b) : (e.clone(q, r.center), r.radius = G), r
      };
      var O = new o,
        I = new e,
        w = new e,
        C = new t,
        x = new t;
      h.fromRectangle2D = function(e, t, r) {
        return h.fromRectangleWithHeights2D(e, t, 0, 0, r)
      }, h.fromRectangleWithHeights2D = function(t, r, i, o, u) {
        if (a(u) || (u = new h), !a(t)) return u.center = e.clone(e.ZERO, u.center), u.radius = 0, u;
        r = n(r, O), d.southwest(t, C), C.height = i, d.northeast(t, x), x.height = o;
        var s = r.project(C, I),
          c = r.project(x, w),
          l = c.x - s.x,
          f = c.y - s.y,
          m = c.z - s.z;
        u.radius = .5 * Math.sqrt(l * l + f * f + m * m);
        var E = u.center;
        return E.x = s.x + .5 * l, E.y = s.y + .5 * f, E.z = s.z + .5 * m, u
      };
      var P = [];
      h.fromRectangle3D = function(t, r, o, u) {
        if (r = n(r, i.WGS84), o = n(o, 0), a(u) || (u = new h), !a(t)) return u.center = e.clone(e.ZERO, u.center),
          u.radius = 0, u;
        var s = d.subsample(t, r, o, P);
        return h.fromPoints(s, u)
      }, h.fromVertices = function(t, r, i, o) {
        if (a(o) || (o = new h), !a(t) || 0 === t.length) return o.center = e.clone(e.ZERO, o.center), o.radius = 0,
          o;
        r = n(r, e.ZERO), i = n(i, 3);
        var u = R;
        u.x = t[0] + r.x, u.y = t[1] + r.y, u.z = t[2] + r.z;
        var s, c = e.clone(u, m),
          l = e.clone(u, E),
          f = e.clone(u, p),
          d = e.clone(u, _),
          N = e.clone(u, y),
          O = e.clone(u, T),
          I = t.length;
        for (s = 0; s < I; s += i) {
          var w = t[s] + r.x,
            C = t[s + 1] + r.y,
            x = t[s + 2] + r.z;
          u.x = w, u.y = C, u.z = x, w < c.x && e.clone(u, c), w > d.x && e.clone(u, d), C < l.y && e.clone(u, l),
            C > N.y && e.clone(u, N), x < f.z && e.clone(u, f), x > O.z && e.clone(u, O)
        }
        var P = e.magnitudeSquared(e.subtract(d, c, A)),
          U = e.magnitudeSquared(e.subtract(N, l, A)),
          D = e.magnitudeSquared(e.subtract(O, f, A)),
          L = c,
          F = d,
          b = P;
        U > b && (b = U, L = l, F = N), D > b && (b = D, L = f, F = O);
        var B = S;
        B.x = .5 * (L.x + F.x), B.y = .5 * (L.y + F.y), B.z = .5 * (L.z + F.z);
        var z = e.magnitudeSquared(e.subtract(F, B, A)),
          q = Math.sqrt(z),
          G = v;
        G.x = c.x, G.y = l.y, G.z = f.z;
        var V = g;
        V.x = d.x, V.y = N.y, V.z = O.z;
        var W = e.multiplyByScalar(e.add(G, V, A), .5, M),
          X = 0;
        for (s = 0; s < I; s += i) {
          u.x = t[s] + r.x, u.y = t[s + 1] + r.y, u.z = t[s + 2] + r.z;
          var H = e.magnitude(e.subtract(u, W, A));
          H > X && (X = H);
          var k = e.magnitudeSquared(e.subtract(u, B, A));
          if (k > z) {
            var Y = Math.sqrt(k);
            q = .5 * (q + Y), z = q * q;
            var j = Y - q;
            B.x = (q * B.x + j * u.x) / Y, B.y = (q * B.y + j * u.y) / Y, B.z = (q * B.z + j * u.z) / Y
          }
        }
        return q < X ? (e.clone(B, o.center), o.radius = q) : (e.clone(W, o.center), o.radius = X), o
      }, h.fromEncodedCartesianVertices = function(t, r, n) {
        if (a(n) || (n = new h), !a(t) || !a(r) || t.length !== r.length || 0 === t.length) return n.center = e
          .clone(e.ZERO, n.center), n.radius = 0, n;
        var i = R;
        i.x = t[0] + r[0], i.y = t[1] + r[1], i.z = t[2] + r[2];
        var o, u = e.clone(i, m),
          s = e.clone(i, E),
          c = e.clone(i, p),
          l = e.clone(i, _),
          f = e.clone(i, y),
          d = e.clone(i, T),
          N = t.length;
        for (o = 0; o < N; o += 3) {
          var O = t[o] + r[o],
            I = t[o + 1] + r[o + 1],
            w = t[o + 2] + r[o + 2];
          i.x = O, i.y = I, i.z = w, O < u.x && e.clone(i, u), O > l.x && e.clone(i, l), I < s.y && e.clone(i, s),
            I > f.y && e.clone(i, f), w < c.z && e.clone(i, c), w > d.z && e.clone(i, d)
        }
        var C = e.magnitudeSquared(e.subtract(l, u, A)),
          x = e.magnitudeSquared(e.subtract(f, s, A)),
          P = e.magnitudeSquared(e.subtract(d, c, A)),
          U = u,
          D = l,
          L = C;
        x > L && (L = x, U = s, D = f), P > L && (L = P, U = c, D = d);
        var F = S;
        F.x = .5 * (U.x + D.x), F.y = .5 * (U.y + D.y), F.z = .5 * (U.z + D.z);
        var b = e.magnitudeSquared(e.subtract(D, F, A)),
          B = Math.sqrt(b),
          z = v;
        z.x = u.x, z.y = s.y, z.z = c.z;
        var q = g;
        q.x = l.x, q.y = f.y, q.z = d.z;
        var G = e.multiplyByScalar(e.add(z, q, A), .5, M),
          V = 0;
        for (o = 0; o < N; o += 3) {
          i.x = t[o] + r[o], i.y = t[o + 1] + r[o + 1], i.z = t[o + 2] + r[o + 2];
          var W = e.magnitude(e.subtract(i, G, A));
          W > V && (V = W);
          var X = e.magnitudeSquared(e.subtract(i, F, A));
          if (X > b) {
            var H = Math.sqrt(X);
            B = .5 * (B + H), b = B * B;
            var k = H - B;
            F.x = (B * F.x + k * i.x) / H, F.y = (B * F.y + k * i.y) / H, F.z = (B * F.z + k * i.z) / H
          }
        }
        return B < V ? (e.clone(F, n.center), n.radius = B) : (e.clone(G, n.center), n.radius = V), n
      }, h.fromCornerPoints = function(t, r, n) {
        a(n) || (n = new h);
        var i = n.center;
        return e.add(t, r, i), e.multiplyByScalar(i, .5, i), n.radius = e.distance(i, r), n
      }, h.fromEllipsoid = function(t, r) {
        return a(r) || (r = new h), e.clone(e.ZERO, r.center), r.radius = t.maximumRadius, r
      };
      var U = new e;
      h.fromBoundingSpheres = function(t, r) {
        if (a(r) || (r = new h), !a(t) || 0 === t.length) return r.center = e.clone(e.ZERO, r.center), r.radius = 0,
          r;
        var n = t.length;
        if (1 === n) return h.clone(t[0], r);
        if (2 === n) return h.union(t[0], t[1], r);
        var i, o = [];
        for (i = 0; i < n; i++) o.push(t[i].center);
        r = h.fromPoints(o, r);
        var u = r.center,
          s = r.radius;
        for (i = 0; i < n; i++) {
          var c = t[i];
          s = Math.max(s, e.distance(u, c.center, U) + c.radius)
        }
        return r.radius = s, r
      };
      var D = new e,
        L = new e,
        F = new e;
      h.fromOrientedBoundingBox = function(t, r) {
        a(r) || (r = new h);
        var n = t.halfAxes,
          i = l.getColumn(n, 0, D),
          o = l.getColumn(n, 1, L),
          u = l.getColumn(n, 2, F);
        return e.add(i, o, i), e.add(i, u, i), r.center = e.clone(t.center, r.center), r.radius = e.magnitude(i), r
      }, h.clone = function(t, r) {
        if (a(t)) return a(r) ? (r.center = e.clone(t.center, r.center), r.radius = t.radius, r) : new h(t.center, t
          .radius)
      }, h.packedLength = 4, h.pack = function(e, t, r) {
        r = n(r, 0);
        var a = e.center;
        return t[r++] = a.x, t[r++] = a.y, t[r++] = a.z, t[r] = e.radius, t
      }, h.unpack = function(e, t, r) {
        t = n(t, 0), a(r) || (r = new h);
        var i = r.center;
        return i.x = e[t++], i.y = e[t++], i.z = e[t++], r.radius = e[t], r
      };
      var b = new e,
        B = new e;
      h.union = function(t, r, n) {
        a(n) || (n = new h);
        var i = t.center,
          o = t.radius,
          u = r.center,
          s = r.radius,
          c = e.subtract(u, i, b),
          l = e.magnitude(c);
        if (o >= l + s) return t.clone(n), n;
        if (s >= l + o) return r.clone(n), n;
        var f = .5 * (o + l + s),
          d = e.multiplyByScalar(c, (-o + f) / l, B);
        return e.add(d, i, d), e.clone(d, n.center), n.radius = f, n
      };
      var z = new e;
      h.expand = function(t, r, n) {
        n = h.clone(t, n);
        var a = e.magnitude(e.subtract(r, n.center, z));
        return a > n.radius && (n.radius = a), n
      }, h.intersectPlane = function(t, r) {
        var n = t.center,
          a = t.radius,
          i = r.normal,
          o = e.dot(i, n) + r.distance;
        return o < -a ? u.OUTSIDE : o < a ? u.INTERSECTING : u.INSIDE
      }, h.transform = function(e, t, r) {
        return a(r) || (r = new h), r.center = f.multiplyByPoint(t, e.center, r.center), r.radius = f
          .getMaximumScale(t) * e.radius, r
      };
      var q = new e;
      h.distanceSquaredTo = function(t, r) {
        var n = e.subtract(t.center, r, q);
        return e.magnitudeSquared(n) - t.radius * t.radius
      }, h.transformWithoutScale = function(e, t, r) {
        return a(r) || (r = new h), r.center = f.multiplyByPoint(t, e.center, r.center), r.radius = e.radius, r
      };
      var G = new e;
      h.computePlaneDistances = function(t, r, n, i) {
        a(i) || (i = new s);
        var o = e.subtract(t.center, r, G),
          u = e.dot(n, o);
        return i.start = u - t.radius, i.stop = u + t.radius, i
      };
      for (var V = new e, W = new e, X = new e, H = new e, k = new e, Y = new t, j = new Array(8), Z = 0; Z < 8; ++Z)
        j[Z] = new e;
      var K = new o;
      return h.projectTo2D = function(t, r, a) {
        r = n(r, K);
        var i = r.ellipsoid,
          o = t.center,
          u = t.radius,
          s = i.geodeticSurfaceNormal(o, V),
          c = e.cross(e.UNIT_Z, s, W);
        e.normalize(c, c);
        var l = e.cross(s, c, X);
        e.normalize(l, l), e.multiplyByScalar(s, u, s), e.multiplyByScalar(l, u, l), e.multiplyByScalar(c, u, c);
        var f = e.negate(l, k),
          d = e.negate(c, H),
          m = j,
          E = m[0];
        e.add(s, l, E), e.add(E, c, E), E = m[1], e.add(s, l, E), e.add(E, d, E), E = m[2], e.add(s, f, E), e.add(E,
          d, E), E = m[3], e.add(s, f, E), e.add(E, c, E), e.negate(s, s), E = m[4], e.add(s, l, E), e.add(E, c,
          E), E = m[5], e.add(s, l, E), e.add(E, d, E), E = m[6], e.add(s, f, E), e.add(E, d, E), E = m[7], e.add(
          s, f, E), e.add(E, c, E);
        for (var p = m.length, _ = 0; _ < p; ++_) {
          var y = m[_];
          e.add(o, y, y);
          var T = i.cartesianToCartographic(y, Y);
          r.project(T, y)
        }
        a = h.fromPoints(m, a), o = a.center;
        var R = o.x,
          A = o.y,
          S = o.z;
        return o.x = S, o.y = R, o.z = A, a
      }, h.isOccluded = function(e, t) {
        return !t.isBoundingSphereVisible(e)
      }, h.equals = function(t, r) {
        return t === r || a(t) && a(r) && e.equals(t.center, r.center) && t.radius === r.radius
      }, h.prototype.intersectPlane = function(e) {
        return h.intersectPlane(this, e)
      }, h.prototype.distanceSquaredTo = function(e) {
        return h.distanceSquaredTo(this, e)
      }, h.prototype.computePlaneDistances = function(e, t, r) {
        return h.computePlaneDistances(this, e, t, r)
      }, h.prototype.isOccluded = function(e) {
        return h.isOccluded(this, e)
      }, h.prototype.equals = function(e) {
        return h.equals(this, e)
      }, h.prototype.clone = function(e) {
        return h.clone(this, e)
      }, h.prototype.volume = function() {
        var e = this.radius;
        return N * e * e * e
      }, h
    }), define("Core/Cartesian2", ["./Check", "./defaultValue", "./defined", "./DeveloperError", "./freezeObject",
      "./Math"
    ], function(e, t, r, n, a, i) {
      "use strict";

      function o(e, r) {
        this.x = t(e, 0), this.y = t(r, 0)
      }
      o.fromElements = function(e, t, n) {
        return r(n) ? (n.x = e, n.y = t, n) : new o(e, t)
      }, o.clone = function(e, t) {
        if (r(e)) return r(t) ? (t.x = e.x, t.y = e.y, t) : new o(e.x, e.y)
      }, o.fromCartesian3 = o.clone, o.fromCartesian4 = o.clone, o.packedLength = 2, o.pack = function(e, r, n) {
        return n = t(n, 0), r[n++] = e.x, r[n] = e.y, r
      }, o.unpack = function(e, n, a) {
        return n = t(n, 0), r(a) || (a = new o), a.x = e[n++], a.y = e[n], a
      }, o.packArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = 2 * n : t = new Array(2 * n);
        for (var a = 0; a < n; ++a) o.pack(e[a], t, 2 * a);
        return t
      }, o.unpackArray = function(e, t) {
        var n = e.length;
        r(t) ? t.length = n / 2 : t = new Array(n / 2);
        for (var a = 0; a < n; a += 2) {
          var i = a / 2;
          t[i] = o.unpack(e, a, t[i])
        }
        return t
      }, o.fromArray = o.unpack, o.maximumComponent = function(e) {
        return Math.max(e.x, e.y)
      }, o.minimumComponent = function(e) {
        return Math.min(e.x, e.y)
      }, o.minimumByComponent = function(e, t, r) {
        return r.x = Math.min(e.x, t.x), r.y = Math.min(e.y, t.y), r
      }, o.maximumByComponent = function(e, t, r) {
        return r.x = Math.max(e.x, t.x), r.y = Math.max(e.y, t.y), r
      }, o.magnitudeSquared = function(e) {
        return e.x * e.x + e.y * e.y
      }, o.magnitude = function(e) {
        return Math.sqrt(o.magnitudeSquared(e))
      };
      var u = new o;
      o.distance = function(e, t) {
        return o.subtract(e, t, u), o.magnitude(u)
      }, o.distanceSquared = function(e, t) {
        return o.subtract(e, t, u), o.magnitudeSquared(u)
      }, o.normalize = function(e, t) {
        var r = o.magnitude(e);
        return t.x = e.x / r, t.y = e.y / r, t
      }, o.dot = function(e, t) {
        return e.x * t.x + e.y * t.y
      }, o.multiplyComponents = function(e, t, r) {
        return r.x = e.x * t.x, r.y = e.y * t.y, r
      }, o.divideComponents = function(e, t, r) {
        return r.x = e.x / t.x, r.y = e.y / t.y, r
      }, o.add = function(e, t, r) {
        return r.x = e.x + t.x, r.y = e.y + t.y, r
      }, o.subtract = function(e, t, r) {
        return r.x = e.x - t.x, r.y = e.y - t.y, r
      }, o.multiplyByScalar = function(e, t, r) {
        return r.x = e.x * t, r.y = e.y * t, r
      }, o.divideByScalar = function(e, t, r) {
        return r.x = e.x / t, r.y = e.y / t, r
      }, o.negate = function(e, t) {
        return t.x = -e.x, t.y = -e.y, t
      }, o.abs = function(e, t) {
        return t.x = Math.abs(e.x), t.y = Math.abs(e.y), t
      };
      var s = new o;
      o.lerp = function(e, t, r, n) {
        return o.multiplyByScalar(t, r, s), n = o.multiplyByScalar(e, 1 - r, n), o.add(s, n, n)
      };
      var c = new o,
        l = new o;
      o.angleBetween = function(e, t) {
        return o.normalize(e, c), o.normalize(t, l), i.acosClamped(o.dot(c, l))
      };
      var f = new o;
      return o.mostOrthogonalAxis = function(e, t) {
          var r = o.normalize(e, f);
          return o.abs(r, r), t = r.x <= r.y ? o.clone(o.UNIT_X, t) : o.clone(o.UNIT_Y, t)
        }, o.equals = function(e, t) {
          return e === t || r(e) && r(t) && e.x === t.x && e.y === t.y
        }, o.equalsArray = function(e, t, r) {
          return e.x === t[r] && e.y === t[r + 1]
        }, o.equalsEpsilon = function(e, t, n, a) {
          return e === t || r(e) && r(t) && i.equalsEpsilon(e.x, t.x, n, a) && i.equalsEpsilon(e.y, t.y, n, a)
        }, o.ZERO = a(new o(0, 0)), o.UNIT_X = a(new o(1, 0)), o.UNIT_Y = a(new o(0, 1)), o.prototype.clone =
        function(e) {
          return o.clone(this, e)
        }, o.prototype.equals = function(e) {
          return o.equals(this, e)
        }, o.prototype.equalsEpsilon = function(e, t, r) {
          return o.equalsEpsilon(this, e, t, r)
        }, o.prototype.toString = function() {
          return "(" + this.x + ", " + this.y + ")"
        }, o
    }), define("Core/EllipsoidalOccluder", ["./BoundingSphere", "./Cartesian3", "./Check", "./defaultValue",
      "./defined", "./defineProperties", "./Rectangle"
    ], function(e, t, r, n, a, i, o) {
      "use strict";

      function u(e, r) {
        this._ellipsoid = e, this._cameraPosition = new t, this._cameraPositionInScaledSpace = new t, this
          ._distanceToLimbInScaledSpaceSquared = 0, a(r) && (this.cameraPosition = r)
      }

      function s(e, r, n) {
        var a = e.transformPositionToScaledSpace(r, m),
          i = t.magnitudeSquared(a),
          o = Math.sqrt(i),
          u = t.divideByScalar(a, o, E);
        i = Math.max(1, i), o = Math.max(1, o);
        var s = t.dot(u, n),
          c = t.magnitude(t.cross(u, n, u)),
          l = 1 / o;
        return 1 / (s * l - c * (Math.sqrt(i - 1) * l))
      }

      function c(e, r, n) {
        if (!(r <= 0 || r === 1 / 0 || r !== r)) return t.multiplyByScalar(e, r, n)
      }

      function l(e, r) {
        return t.equals(r, t.ZERO) ? r : (e.transformPositionToScaledSpace(r, p), t.normalize(p, p))
      }
      i(u.prototype, {
        ellipsoid: {
          get: function() {
            return this._ellipsoid
          }
        },
        cameraPosition: {
          get: function() {
            return this._cameraPosition
          },
          set: function(e) {
            var r = this._ellipsoid,
              n = r.transformPositionToScaledSpace(e, this._cameraPositionInScaledSpace),
              a = t.magnitudeSquared(n) - 1;
            t.clone(e, this._cameraPosition), this._cameraPositionInScaledSpace = n, this
              ._distanceToLimbInScaledSpaceSquared = a
          }
        }
      });
      var f = new t;
      u.prototype.isPointVisible = function(e) {
        var t = this._ellipsoid,
          r = t.transformPositionToScaledSpace(e, f);
        return this.isScaledSpacePointVisible(r)
      }, u.prototype.isScaledSpacePointVisible = function(e) {
        var r = this._cameraPositionInScaledSpace,
          n = this._distanceToLimbInScaledSpaceSquared,
          a = t.subtract(e, r, f),
          i = -t.dot(a, r);
        return !(n < 0 ? i > 0 : i > n && i * i / t.magnitudeSquared(a) > n)
      }, u.prototype.computeHorizonCullingPoint = function(e, r, n) {
        a(n) || (n = new t);
        for (var i = this._ellipsoid, o = l(i, e), u = 0, f = 0, d = r.length; f < d; ++f) {
          var h = r[f],
            m = s(i, h, o);
          u = Math.max(u, m)
        }
        return c(o, u, n)
      };
      var d = new t;
      u.prototype.computeHorizonCullingPointFromVertices = function(e, r, i, o, u) {
        a(u) || (u = new t), o = n(o, t.ZERO);
        for (var f = this._ellipsoid, h = l(f, e), m = 0, E = 0, p = r.length; E < p; E += i) {
          d.x = r[E] + o.x, d.y = r[E + 1] + o.y, d.z = r[E + 2] + o.z;
          var _ = s(f, d, h);
          m = Math.max(m, _)
        }
        return c(h, m, u)
      };
      var h = [];
      u.prototype.computeHorizonCullingPointFromRectangle = function(r, n, a) {
        var i = o.subsample(r, n, 0, h),
          u = e.fromPoints(i);
        if (!(t.magnitude(u.center) < .1 * n.minimumRadius)) return this.computeHorizonCullingPoint(u.center, i, a)
      };
      var m = new t,
        E = new t,
        p = new t;
      return u
    }), define("Core/QuadraticRealPolynomial", ["./DeveloperError", "./Math"], function(e, t) {
      "use strict";

      function r(e, r, n) {
        var a = e + r;
        return t.sign(e) !== t.sign(r) && Math.abs(a / Math.max(Math.abs(e), Math.abs(r))) < n ? 0 : a
      }
      var n = {};
      return n.computeDiscriminant = function(e, t, r) {
        return t * t - 4 * e * r
      }, n.computeRealRoots = function(e, n, a) {
        var i;
        if (0 === e) return 0 === n ? [] : [-a / n];
        if (0 === n) {
          if (0 === a) return [0, 0];
          var o = Math.abs(a),
            u = Math.abs(e);
          if (o < u && o / u < t.EPSILON14) return [0, 0];
          if (o > u && u / o < t.EPSILON14) return [];
          if ((i = -a / e) < 0) return [];
          var s = Math.sqrt(i);
          return [-s, s]
        }
        if (0 === a) return i = -n / e, i < 0 ? [i, 0] : [0, i];
        var c = n * n,
          l = 4 * e * a,
          f = r(c, -l, t.EPSILON14);
        if (f < 0) return [];
        var d = -.5 * r(n, t.sign(n) * Math.sqrt(f), t.EPSILON14);
        return n > 0 ? [d / e, a / d] : [a / d, d / e]
      }, n
    }), define("Core/CubicRealPolynomial", ["./DeveloperError", "./QuadraticRealPolynomial"], function(e, t) {
      "use strict";

      function r(e, t, r, n) {
        var a, i, o = e,
          u = t / 3,
          s = r / 3,
          c = n,
          l = o * s,
          f = u * c,
          d = u * u,
          h = s * s,
          m = o * s - d,
          E = o * c - u * s,
          p = u * c - h,
          _ = 4 * m * p - E * E;
        if (_ < 0) {
          var y, T, R;
          d * f >= l * h ? (y = o, T = m, R = -2 * u * m + o * E) : (y = c, T = p, R = -c * E + 2 * s * p);
          var A = R < 0 ? -1 : 1,
            S = -A * Math.abs(y) * Math.sqrt(-_);
          i = -R + S;
          var v = i / 2,
            g = v < 0 ? -Math.pow(-v, 1 / 3) : Math.pow(v, 1 / 3),
            M = i === S ? -g : -T / g;
          return a = T <= 0 ? g + M : -R / (g * g + M * M + T), d * f >= l * h ? [(a - u) / o] : [-c / (a + s)]
        }
        var N = m,
          O = -2 * u * m + o * E,
          I = p,
          w = -c * E + 2 * s * p,
          C = Math.sqrt(_),
          x = Math.sqrt(3) / 2,
          P = Math.abs(Math.atan2(o * C, -O) / 3);
        a = 2 * Math.sqrt(-N);
        var U = Math.cos(P);
        i = a * U;
        var D = a * (-U / 2 - x * Math.sin(P)),
          L = i + D > 2 * u ? i - u : D - u,
          F = o,
          b = L / F;
        P = Math.abs(Math.atan2(c * C, -w) / 3), a = 2 * Math.sqrt(-I), U = Math.cos(P), i = a * U, D = a * (-U / 2 -
          x * Math.sin(P));
        var B = -c,
          z = i + D < 2 * s ? i + s : D + s,
          q = B / z,
          G = F * z,
          V = -L * z - F * B,
          W = L * B,
          X = (s * V - u * W) / (-u * V + s * G);
        return b <= X ? b <= q ? X <= q ? [b, X, q] : [b, q, X] : [q, b, X] : b <= q ? [X, b, q] : X <= q ? [X, q,
          b] : [q, X, b]
      }
      var n = {};
      return n.computeDiscriminant = function(e, t, r, n) {
        var a = e * e,
          i = t * t,
          o = r * r;
        return 18 * e * t * r * n + i * o - 27 * a * (n * n) - 4 * (e * o * r + i * t * n)
      }, n.computeRealRoots = function(e, n, a, i) {
        var o, u;
        if (0 === e) return t.computeRealRoots(n, a, i);
        if (0 === n) {
          if (0 === a) {
            if (0 === i) return [0, 0, 0];
            u = -i / e;
            var s = u < 0 ? -Math.pow(-u, 1 / 3) : Math.pow(u, 1 / 3);
            return [s, s, s]
          }
          return 0 === i ? (o = t.computeRealRoots(e, 0, a), 0 === o.Length ? [0] : [o[0], 0, o[1]]) : r(e, 0, a, i)
        }
        return 0 === a ? 0 === i ? (u = -n / e, u < 0 ? [u, 0, 0] : [0, 0, u]) : r(e, n, 0, i) : 0 === i ? (o = t
          .computeRealRoots(e, n, a), 0 === o.length ? [0] : o[1] <= 0 ? [o[0], o[1], 0] : o[0] >= 0 ? [0, o[0],
            o[1]
          ] : [o[0], 0, o[1]]) : r(e, n, a, i)
      }, n
    }), define("Core/QuarticRealPolynomial", ["./CubicRealPolynomial", "./DeveloperError", "./Math",
      "./QuadraticRealPolynomial"
    ], function(e, t, r, n) {
      "use strict";

      function a(t, a, i, o) {
        var u = t * t,
          s = a - 3 * u / 8,
          c = i - a * t / 2 + u * t / 8,
          l = o - i * t / 4 + a * u / 16 - 3 * u * u / 256,
          f = e.computeRealRoots(1, 2 * s, s * s - 4 * l, -c * c);
        if (f.length > 0) {
          var d = -t / 4,
            h = f[f.length - 1];
          if (Math.abs(h) < r.EPSILON14) {
            var m = n.computeRealRoots(1, s, l);
            if (2 === m.length) {
              var E, p = m[0],
                _ = m[1];
              if (p >= 0 && _ >= 0) {
                var y = Math.sqrt(p),
                  T = Math.sqrt(_);
                return [d - T, d - y, d + y, d + T]
              }
              if (p >= 0 && _ < 0) return E = Math.sqrt(p), [d - E, d + E];
              if (p < 0 && _ >= 0) return E = Math.sqrt(_), [d - E, d + E]
            }
            return []
          }
          if (h > 0) {
            var R = Math.sqrt(h),
              A = (s + h - c / R) / 2,
              S = (s + h + c / R) / 2,
              v = n.computeRealRoots(1, R, A),
              g = n.computeRealRoots(1, -R, S);
            return 0 !== v.length ? (v[0] += d, v[1] += d, 0 !== g.length ? (g[0] += d, g[1] += d, v[1] <= g[0] ? [v[
              0], v[1], g[0], g[1]] : g[1] <= v[0] ? [g[0], g[1], v[0], v[1]] : v[0] >= g[0] && v[1] <= g[1] ? [
              g[0], v[0], v[1], g[1]
            ] : g[0] >= v[0] && g[1] <= v[1] ? [v[0], g[0], g[1], v[1]] : v[0] > g[0] && v[0] < g[1] ? [g[0], v[
              0], g[1], v[1]] : [v[0], g[0], v[1], g[1]]) : v) : 0 !== g.length ? (g[0] += d, g[1] += d, g) : []
          }
        }
        return []
      }

      function i(t, a, i, o) {
        var u = i * i,
          s = a * a,
          c = t * t,
          l = -2 * a,
          f = i * t + s - 4 * o,
          d = c * o - i * a * t + u,
          h = e.computeRealRoots(1, l, f, d);
        if (h.length > 0) {
          var m, E, p = h[0],
            _ = a - p,
            y = _ * _,
            T = t / 2,
            R = _ / 2,
            A = y - 4 * o,
            S = y + 4 * Math.abs(o),
            v = c - 4 * p,
            g = c + 4 * Math.abs(p);
          if (p < 0 || A * g < v * S) {
            var M = Math.sqrt(v);
            m = M / 2, E = 0 === M ? 0 : (t * R - i) / M
          } else {
            var N = Math.sqrt(A);
            m = 0 === N ? 0 : (t * R - i) / N, E = N / 2
          }
          var O, I;
          0 === T && 0 === m ? (O = 0, I = 0) : r.sign(T) === r.sign(m) ? (O = T + m, I = p / O) : (I = T - m, O = p /
            I);
          var w, C;
          0 === R && 0 === E ? (w = 0, C = 0) : r.sign(R) === r.sign(E) ? (w = R + E, C = o / w) : (C = R - E, w = o /
            C);
          var x = n.computeRealRoots(1, O, w),
            P = n.computeRealRoots(1, I, C);
          if (0 !== x.length) return 0 !== P.length ? x[1] <= P[0] ? [x[0], x[1], P[0], P[1]] : P[1] <= x[0] ? [P[0],
            P[1], x[0], x[1]
          ] : x[0] >= P[0] && x[1] <= P[1] ? [P[0], x[0], x[1], P[1]] : P[0] >= x[0] && P[1] <= x[1] ? [x[0], P[
            0], P[1], x[1]
          ] : x[0] > P[0] && x[0] < P[1] ? [P[0], x[0], P[1], x[1]] : [x[0], P[0], x[1], P[1]] : x;
          if (0 !== P.length) return P
        }
        return []
      }
      var o = {};
      return o.computeDiscriminant = function(e, t, r, n, a) {
        var i = e * e,
          o = i * e,
          u = t * t,
          s = u * t,
          c = r * r,
          l = c * r,
          f = n * n,
          d = f * n,
          h = a * a;
        return u * c * f - 4 * s * d - 4 * e * l * f + 18 * e * t * r * d - 27 * i * f * f + 256 * o * (h * a) + a *
          (18 * s * r * n - 4 * u * l + 16 * e * c * c - 80 * e * t * c * n - 6 * e * u * f + 144 * i * r * f) + h *
          (144 * e * u * r - 27 * u * u - 128 * i * c - 192 * i * t * n)
      }, o.computeRealRoots = function(t, n, o, u, s) {
        if (Math.abs(t) < r.EPSILON15) return e.computeRealRoots(n, o, u, s);
        var c = n / t,
          l = o / t,
          f = u / t,
          d = s / t,
          h = c < 0 ? 1 : 0;
        switch (h += l < 0 ? h + 1 : h, h += f < 0 ? h + 1 : h, h += d < 0 ? h + 1 : h) {
          case 0:
            return a(c, l, f, d);
          case 1:
          case 2:
            return i(c, l, f, d);
          case 3:
          case 4:
            return a(c, l, f, d);
          case 5:
            return i(c, l, f, d);
          case 6:
          case 7:
            return a(c, l, f, d);
          case 8:
            return i(c, l, f, d);
          case 9:
          case 10:
            return a(c, l, f, d);
          case 11:
            return i(c, l, f, d);
          case 12:
          case 13:
          case 14:
          case 15:
            return a(c, l, f, d);
          default:
            return
        }
      }, o
    }), define("Core/Ray", ["./Cartesian3", "./defaultValue", "./defined", "./DeveloperError"], function(e, t, r, n) {
      "use strict";

      function a(r, n) {
        n = e.clone(t(n, e.ZERO)), e.equals(n, e.ZERO) || e.normalize(n, n), this.origin = e.clone(t(r, e.ZERO)), this
          .direction = n
      }
      return a.getPoint = function(t, n, a) {
        return r(a) || (a = new e), a = e.multiplyByScalar(t.direction, n, a), e.add(t.origin, a, a)
      }, a
    }), define("Core/IntersectionTests", ["./Cartesian3", "./Cartographic", "./defaultValue", "./defined",
      "./DeveloperError", "./Interval", "./Math", "./Matrix3", "./QuadraticRealPolynomial", "./QuarticRealPolynomial",
      "./Ray"
    ], function(e, t, r, n, a, i, o, u, s, c, l) {
      "use strict";

      function f(e, t, r, n) {
        var a = t * t - 4 * e * r;
        if (!(a < 0)) {
          if (a > 0) {
            var i = 1 / (2 * e),
              o = Math.sqrt(a),
              u = (-t + o) * i,
              s = (-t - o) * i;
            return u < s ? (n.root0 = u, n.root1 = s) : (n.root0 = s, n.root1 = u), n
          }
          var c = -t / (2 * e);
          if (0 !== c) return n.root0 = n.root1 = c, n
        }
      }

      function d(t, r, a) {
        n(a) || (a = new i);
        var o = t.origin,
          u = t.direction,
          s = r.center,
          c = r.radius * r.radius,
          l = e.subtract(o, s, y),
          d = e.dot(u, u),
          h = 2 * e.dot(u, l),
          m = e.magnitudeSquared(l) - c,
          E = f(d, h, m, S);
        if (n(E)) return a.start = E.root0, a.stop = E.root1, a
      }

      function h(e, t, r) {
        var n = e + t;
        return o.sign(e) !== o.sign(t) && Math.abs(n / Math.max(Math.abs(e), Math.abs(t))) < r ? 0 : n
      }

      function m(t, r, n, a, i) {
        var l, f = a * a,
          d = i * i,
          m = (t[u.COLUMN1ROW1] - t[u.COLUMN2ROW2]) * d,
          E = i * (a * h(t[u.COLUMN1ROW0], t[u.COLUMN0ROW1], o.EPSILON15) + r.y),
          p = t[u.COLUMN0ROW0] * f + t[u.COLUMN2ROW2] * d + a * r.x + n,
          _ = d * h(t[u.COLUMN2ROW1], t[u.COLUMN1ROW2], o.EPSILON15),
          y = i * (a * h(t[u.COLUMN2ROW0], t[u.COLUMN0ROW2]) + r.z),
          T = [];
        if (0 === y && 0 === _) {
          if (l = s.computeRealRoots(m, E, p), 0 === l.length) return T;
          var R = l[0],
            A = Math.sqrt(Math.max(1 - R * R, 0));
          if (T.push(new e(a, i * R, i * -A)), T.push(new e(a, i * R, i * A)), 2 === l.length) {
            var S = l[1],
              v = Math.sqrt(Math.max(1 - S * S, 0));
            T.push(new e(a, i * S, i * -v)), T.push(new e(a, i * S, i * v))
          }
          return T
        }
        var g = y * y,
          M = _ * _,
          N = m * m,
          O = y * _,
          I = N + M,
          w = 2 * (E * m + O),
          C = 2 * p * m + E * E - M + g,
          x = 2 * (p * E - O),
          P = p * p - g;
        if (0 === I && 0 === w && 0 === C && 0 === x) return T;
        l = c.computeRealRoots(I, w, C, x, P);
        var U = l.length;
        if (0 === U) return T;
        for (var D = 0; D < U; ++D) {
          var L, F = l[D],
            b = F * F,
            B = Math.max(1 - b, 0),
            z = Math.sqrt(B);
          L = o.sign(m) === o.sign(p) ? h(m * b + p, E * F, o.EPSILON12) : o.sign(p) === o.sign(E * F) ? h(m * b, E *
            F + p, o.EPSILON12) : h(m * b + E * F, p, o.EPSILON12);
          var q = h(_ * F, y, o.EPSILON15),
            G = L * q;
          G < 0 ? T.push(new e(a, i * F, i * z)) : G > 0 ? T.push(new e(a, i * F, i * -z)) : 0 !== z ? (T.push(new e(
            a, i * F, i * -z)), T.push(new e(a, i * F, i * z)), ++D) : T.push(new e(a, i * F, i * z))
        }
        return T
      }
      var E = {};
      E.rayPlane = function(t, r, a) {
        n(a) || (a = new e);
        var i = t.origin,
          u = t.direction,
          s = r.normal,
          c = e.dot(s, u);
        if (!(Math.abs(c) < o.EPSILON15)) {
          var l = (-r.distance - e.dot(s, i)) / c;
          if (!(l < 0)) return a = e.multiplyByScalar(u, l, a), e.add(i, a, a)
        }
      };
      var p = new e,
        _ = new e,
        y = new e,
        T = new e,
        R = new e;
      E.rayTriangleParametric = function(t, n, a, i, u) {
        u = r(u, !1);
        var s, c, l, f, d, h = t.origin,
          m = t.direction,
          E = e.subtract(a, n, p),
          A = e.subtract(i, n, _),
          S = e.cross(m, A, y),
          v = e.dot(E, S);
        if (u) {
          if (v < o.EPSILON6) return;
          if (s = e.subtract(h, n, T), (l = e.dot(s, S)) < 0 || l > v) return;
          if (c = e.cross(s, E, R), (f = e.dot(m, c)) < 0 || l + f > v) return;
          d = e.dot(A, c) / v
        } else {
          if (Math.abs(v) < o.EPSILON6) return;
          var g = 1 / v;
          if (s = e.subtract(h, n, T), (l = e.dot(s, S) * g) < 0 || l > 1) return;
          if (c = e.cross(s, E, R), (f = e.dot(m, c) * g) < 0 || l + f > 1) return;
          d = e.dot(A, c) * g
        }
        return d
      }, E.rayTriangle = function(t, r, a, i, o, u) {
        var s = E.rayTriangleParametric(t, r, a, i, o);
        if (n(s) && !(s < 0)) return n(u) || (u = new e), e.multiplyByScalar(t.direction, s, u), e.add(t.origin, u,
          u)
      };
      var A = new l;
      E.lineSegmentTriangle = function(t, r, a, i, o, u, s) {
        var c = A;
        e.clone(t, c.origin), e.subtract(r, t, c.direction), e.normalize(c.direction, c.direction);
        var l = E.rayTriangleParametric(c, a, i, o, u);
        if (!(!n(l) || l < 0 || l > e.distance(t, r))) return n(s) || (s = new e), e.multiplyByScalar(c.direction,
          l, s), e.add(c.origin, s, s)
      };
      var S = {
        root0: 0,
        root1: 0
      };
      E.raySphere = function(e, t, r) {
        if (r = d(e, t, r), n(r) && !(r.stop < 0)) return r.start = Math.max(r.start, 0), r
      };
      var v = new l;
      E.lineSegmentSphere = function(t, r, a, i) {
        var o = v;
        e.clone(t, o.origin);
        var u = e.subtract(r, t, o.direction),
          s = e.magnitude(u);
        if (e.normalize(u, u), i = d(o, a, i), !(!n(i) || i.stop < 0 || i.start > s)) return i.start = Math.max(i
          .start, 0), i.stop = Math.min(i.stop, s), i
      };
      var g = new e,
        M = new e;
      E.rayEllipsoid = function(t, r) {
        var n, a, o, u, s, c = r.oneOverRadii,
          l = e.multiplyComponents(c, t.origin, g),
          f = e.multiplyComponents(c, t.direction, M),
          d = e.magnitudeSquared(l),
          h = e.dot(l, f);
        if (d > 1) {
          if (h >= 0) return;
          var m = h * h;
          if (n = d - 1, a = e.magnitudeSquared(f), o = a * n, m < o) return;
          if (m > o) {
            u = h * h - o, s = -h + Math.sqrt(u);
            var E = s / a,
              p = n / s;
            return E < p ? new i(E, p) : {
              start: p,
              stop: E
            }
          }
          var _ = Math.sqrt(n / a);
          return new i(_, _)
        }
        return d < 1 ? (n = d - 1, a = e.magnitudeSquared(f), o = a * n, u = h * h - o, s = -h + Math.sqrt(u),
          new i(0, s / a)) : h < 0 ? (a = e.magnitudeSquared(f), new i(0, -h / a)) : void 0
      };
      var N = new e,
        O = new e,
        I = new e,
        w = new e,
        C = new e,
        x = new u,
        P = new u,
        U = new u,
        D = new u,
        L = new u,
        F = new u,
        b = new u,
        B = new e,
        z = new e,
        q = new t;
      E.grazingAltitudeLocation = function(t, r) {
        var a = t.origin,
          i = t.direction;
        if (!e.equals(a, e.ZERO)) {
          var s = r.geodeticSurfaceNormal(a, N);
          if (e.dot(i, s) >= 0) return a
        }
        var c = n(this.rayEllipsoid(t, r)),
          l = r.transformPositionToScaledSpace(i, N),
          f = e.normalize(l, l),
          d = e.mostOrthogonalAxis(l, w),
          h = e.normalize(e.cross(d, f, O), O),
          E = e.normalize(e.cross(f, h, I), I),
          p = x;
        p[0] = f.x, p[1] = f.y, p[2] = f.z, p[3] = h.x, p[4] = h.y, p[5] = h.z, p[6] = E.x, p[7] = E.y, p[8] = E.z;
        var _ = u.transpose(p, P),
          y = u.fromScale(r.radii, U),
          T = u.fromScale(r.oneOverRadii, D),
          R = L;
        R[0] = 0, R[1] = -i.z, R[2] = i.y, R[3] = i.z, R[4] = 0, R[5] = -i.x, R[6] = -i.y, R[7] = i.x, R[8] = 0;
        var A, S, v = u.multiply(u.multiply(_, T, F), R, F),
          g = u.multiply(u.multiply(v, y, b), p, b),
          M = u.multiplyByVector(v, a, C),
          G = m(g, e.negate(M, N), 0, 0, 1),
          V = G.length;
        if (V > 0) {
          for (var W = e.clone(e.ZERO, z), X = Number.NEGATIVE_INFINITY, H = 0; H < V; ++H) {
            A = u.multiplyByVector(y, u.multiplyByVector(p, G[H], B), B);
            var k = e.normalize(e.subtract(A, a, w), w),
              Y = e.dot(k, i);
            Y > X && (X = Y, W = e.clone(A, W))
          }
          var j = r.cartesianToCartographic(W, q);
          return X = o.clamp(X, 0, 1), S = e.magnitude(e.subtract(W, a, w)) * Math.sqrt(1 - X * X), S = c ? -S : S,
            j.height = S, r.cartographicToCartesian(j, new e)
        }
      };
      var G = new e;
      return E.lineSegmentPlane = function(t, r, a, i) {
        n(i) || (i = new e);
        var u = e.subtract(r, t, G),
          s = a.normal,
          c = e.dot(s, u);
        if (!(Math.abs(c) < o.EPSILON6)) {
          var l = e.dot(s, t),
            f = -(a.distance + l) / c;
          if (!(f < 0 || f > 1)) return e.multiplyByScalar(u, f, i), e.add(t, i, i), i
        }
      }, E.trianglePlaneIntersection = function(t, r, n, a) {
        var i = a.normal,
          o = a.distance,
          u = e.dot(i, t) + o < 0,
          s = e.dot(i, r) + o < 0,
          c = e.dot(i, n) + o < 0,
          l = 0;
        l += u ? 1 : 0, l += s ? 1 : 0, l += c ? 1 : 0;
        var f, d;
        if (1 !== l && 2 !== l || (f = new e, d = new e), 1 === l) {
          if (u) return E.lineSegmentPlane(t, r, a, f), E.lineSegmentPlane(t, n, a, d), {
            positions: [t, r, n, f, d],
            indices: [0, 3, 4, 1, 2, 4, 1, 4, 3]
          };
          if (s) return E.lineSegmentPlane(r, n, a, f), E.lineSegmentPlane(r, t, a, d), {
            positions: [t, r, n, f, d],
            indices: [1, 3, 4, 2, 0, 4, 2, 4, 3]
          };
          if (c) return E.lineSegmentPlane(n, t, a, f), E.lineSegmentPlane(n, r, a, d), {
            positions: [t, r, n, f, d],
            indices: [2, 3, 4, 0, 1, 4, 0, 4, 3]
          }
        } else if (2 === l) {
          if (!u) return E.lineSegmentPlane(r, t, a, f), E.lineSegmentPlane(n, t, a, d), {
            positions: [t, r, n, f, d],
            indices: [1, 2, 4, 1, 4, 3, 0, 3, 4]
          };
          if (!s) return E.lineSegmentPlane(n, r, a, f), E.lineSegmentPlane(t, r, a, d), {
            positions: [t, r, n, f, d],
            indices: [2, 0, 4, 2, 4, 3, 1, 3, 4]
          };
          if (!c) return E.lineSegmentPlane(t, n, a, f), E.lineSegmentPlane(r, n, a, d), {
            positions: [t, r, n, f, d],
            indices: [0, 1, 4, 0, 4, 3, 2, 3, 4]
          }
        }
      }, E
    }), define("Core/Plane", ["./Cartesian3", "./Check", "./defined", "./DeveloperError", "./freezeObject", "./Math",
      "./Matrix4"
    ], function(e, t, r, n, a, i, o) {
      "use strict";

      function u(t, r) {
        this.normal = e.clone(t), this.distance = r
      }
      u.fromPointNormal = function(t, n, a) {
        var i = -e.dot(n, t);
        return r(a) ? (e.clone(n, a.normal), a.distance = i, a) : new u(n, i)
      };
      var s = new e;
      u.fromCartesian4 = function(t, n) {
        var a = e.fromCartesian4(t, s),
          i = t.w;
        return r(n) ? (e.clone(a, n.normal), n.distance = i, n) : new u(a, i)
      }, u.getPointDistance = function(t, r) {
        return e.dot(t.normal, r) + t.distance
      };
      var c = new e;
      u.projectPointOntoPlane = function(t, n, a) {
        r(a) || (a = new e);
        var i = u.getPointDistance(t, n),
          o = e.multiplyByScalar(t.normal, i, c);
        return e.subtract(n, o, a)
      };
      var l = new e;
      return u.transform = function(t, r, n) {
          return o.multiplyByPointAsVector(r, t.normal, s), e.normalize(s, s), e.multiplyByScalar(t.normal, -t
            .distance, l), o.multiplyByPoint(r, l, l), u.fromPointNormal(l, s, n)
        }, u.clone = function(t, n) {
          return r(n) ? (e.clone(t.normal, n.normal), n.distance = t.distance, n) : new u(t.normal, t.distance)
        }, u.equals = function(t, r) {
          return t.distance === r.distance && e.equals(t.normal, r.normal)
        }, u.ORIGIN_XY_PLANE = a(new u(e.UNIT_Z, 0)), u.ORIGIN_YZ_PLANE = a(new u(e.UNIT_X, 0)), u.ORIGIN_ZX_PLANE =
        a(new u(e.UNIT_Y, 0)), u
    }),
    function(e) {
      "use strict";
      e("ThirdParty/when", [], function() {
        function e(e, r, n, a) {
          return t(e).then(r, n, a)
        }

        function t(e) {
          var t, r;
          return e instanceof n ? t = e : u(e) ? (r = o(), e.then(function(e) {
            r.resolve(e)
          }, function(e) {
            r.reject(e)
          }, function(e) {
            r.progress(e)
          }), t = r.promise) : t = a(e), t
        }

        function r(t) {
          return e(t, i)
        }

        function n(e) {
          this.then = e
        }

        function a(e) {
          return new n(function(r) {
            try {
              return t(r ? r(e) : e)
            } catch (e) {
              return i(e)
            }
          })
        }

        function i(e) {
          return new n(function(r, n) {
            try {
              return n ? t(n(e)) : i(e)
            } catch (e) {
              return i(e)
            }
          })
        }

        function o() {
          function e(e, t, r) {
            return d(e, t, r)
          }

          function r(e) {
            return m(e)
          }

          function a(e) {
            return m(i(e))
          }

          function u(e) {
            return h(e)
          }
          var s, c, l, f, d, h, m;
          return c = new n(e), s = {
            then: e,
            resolve: r,
            reject: a,
            progress: u,
            promise: c,
            resolver: {
              resolve: r,
              reject: a,
              progress: u
            }
          }, l = [], f = [], d = function(e, t, r) {
            var n, a;
            return n = o(), a = "function" == typeof r ? function(e) {
              try {
                n.progress(r(e))
              } catch (e) {
                n.progress(e)
              }
            } : function(e) {
              n.progress(e)
            }, l.push(function(r) {
              r.then(e, t).then(n.resolve, n.reject, a)
            }), f.push(a), n.promise
          }, h = function(e) {
            return E(f, e), e
          }, m = function(e) {
            return e = t(e), d = e.then, m = t, h = _, E(l, e), f = l = A, e
          }, s
        }

        function u(e) {
          return e && "function" == typeof e.then
        }

        function s(t, r, n, a, i) {
          return p(2, arguments), e(t, function(t) {
            function u(e) {
              E(e)
            }

            function s(e) {
              m(e)
            }
            var c, l, f, d, h, m, E, p, y, T;
            if (y = t.length >>> 0, c = Math.max(0, Math.min(r, y)), f = [], l = y - c + 1, d = [], h = o(), c)
              for (p = h.progress, E = function(e) {
                  d.push(e), --l || (m = E = _, h.reject(d))
                }, m = function(e) {
                  f.push(e), --c || (m = E = _, h.resolve(f))
                }, T = 0; T < y; ++T) T in t && e(t[T], s, u, p);
            else h.resolve(f);
            return h.then(n, a, i)
          })
        }

        function c(e, t, r, n) {
          function a(e) {
            return t ? t(e[0]) : e[0]
          }
          return s(e, 1, a, r, n)
        }

        function l(e, t, r, n) {
          return p(1, arguments), d(e, y).then(t, r, n)
        }

        function f() {
          return d(arguments, y)
        }

        function d(t, r) {
          return e(t, function(t) {
            var n, a, i, u, s, c;
            if (i = a = t.length >>> 0, n = [], c = o(), i)
              for (u = function(t, a) {
                  e(t, r).then(function(e) {
                    n[a] = e, --i || c.resolve(n)
                  }, c.reject)
                }, s = 0; s < a; s++) s in t ? u(t[s], s) : --i;
            else c.resolve(n);
            return c.promise
          })
        }

        function h(t, r) {
          var n = R.call(arguments, 1);
          return e(t, function(t) {
            var a;
            return a = t.length, n[0] = function(t, n, i) {
              return e(t, function(t) {
                return e(n, function(e) {
                  return r(t, e, i, a)
                })
              })
            }, T.apply(t, n)
          })
        }

        function m(t, r, n) {
          var a = arguments.length > 2;
          return e(t, function(e) {
            return e = a ? n : e, r.resolve(e), e
          }, function(e) {
            return r.reject(e), i(e)
          }, r.progress)
        }

        function E(e, t) {
          for (var r, n = 0; r = e[n++];) r(t)
        }

        function p(e, t) {
          for (var r, n = t.length; n > e;)
            if (null != (r = t[--n]) && "function" != typeof r) throw new Error("arg " + n + " must be a function")
        }

        function _() {}

        function y(e) {
          return e
        }
        var T, R, A;
        return e.defer = o, e.resolve = t, e.reject = r, e.join = f, e.all = l, e.map = d, e.reduce = h, e.any = c,
          e.some = s, e.chain = m, e.isPromise = u, n.prototype = {
            always: function(e, t) {
              return this.then(e, e, t)
            },
            otherwise: function(e) {
              return this.then(A, e)
            },
            yield: function(e) {
              return this.then(function() {
                return e
              })
            },
            spread: function(e) {
              return this.then(function(t) {
                return l(t, function(t) {
                  return e.apply(A, t)
                })
              })
            }
          }, R = [].slice, T = [].reduce || function(e) {
            var t, r, n, a, i;
            if (i = 0, t = Object(this), a = t.length >>> 0, r = arguments, r.length <= 1)
              for (;;) {
                if (i in t) {
                  n = t[i++];
                  break
                }
                if (++i >= a) throw new TypeError
              } else n = r[1];
            for (; i < a; ++i) i in t && (n = e(n, t[i], i, t));
            return n
          }, e
      })
    }("function" == typeof define && define.amd ? define : function(e) {
      "object" == typeof exports ? module.exports = e() : this.when = e()
    }), define("Core/binarySearch", ["./Check"], function(e) {
      "use strict";

      function t(e, t, r) {
        for (var n, a, i = 0, o = e.length - 1; i <= o;)
          if (n = ~~((i + o) / 2), (a = r(e[n], t)) < 0) i = n + 1;
          else {
            if (!(a > 0)) return n;
            o = n - 1
          } return ~(o + 1)
      }
      return t
    }), define("Core/EarthOrientationParametersSample", [], function() {
      "use strict";

      function e(e, t, r, n, a) {
        this.xPoleWander = e, this.yPoleWander = t, this.xPoleOffset = r, this.yPoleOffset = n, this.ut1MinusUtc = a
      }
      return e
    }), define("ThirdParty/sprintf", [], function() {
      function e() {
        var e = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g,
          t = arguments,
          r = 0,
          n = t[r++],
          a = function(e, t, r, n) {
            r || (r = " ");
            var a = e.length >= t ? "" : Array(1 + t - e.length >>> 0).join(r);
            return n ? e + a : a + e
          },
          i = function(e, t, r, n, i, o) {
            var u = n - e.length;
            return u > 0 && (e = r || !i ? a(e, n, o, r) : e.slice(0, t.length) + a("", u, "0", !0) + e.slice(t
              .length)), e
          },
          o = function(e, t, r, n, o, u, s) {
            var c = e >>> 0;
            return r = r && c && {
              2: "0b",
              8: "0",
              16: "0x"
            } [t] || "", e = r + a(c.toString(t), u || 0, "0", !1), i(e, r, n, o, s)
          },
          u = function(e, t, r, n, a, o) {
            return null != n && (e = e.slice(0, n)), i(e, "", t, r, a, o)
          },
          s = function(e, n, s, c, l, f, d) {
            var h, m, E, p, _;
            if ("%%" == e) return "%";
            for (var y = !1, T = "", R = !1, A = !1, S = " ", v = s.length, g = 0; s && g < v; g++) switch (s.charAt(
              g)) {
              case " ":
                T = " ";
                break;
              case "+":
                T = "+";
                break;
              case "-":
                y = !0;
                break;
              case "'":
                S = s.charAt(g + 1);
                break;
              case "0":
                R = !0;
                break;
              case "#":
                A = !0
            }
            if (c = c ? "*" == c ? +t[r++] : "*" == c.charAt(0) ? +t[c.slice(1, -1)] : +c : 0, c < 0 && (c = -c, y = !
                0), !isFinite(c)) throw new Error("sprintf: (minimum-)width must be finite");
            switch (f = f ? "*" == f ? +t[r++] : "*" == f.charAt(0) ? +t[f.slice(1, -1)] : +f : "fFeE".indexOf(d) > -
              1 ? 6 : "d" == d ? 0 : void 0, _ = n ? t[n.slice(0, -1)] : t[r++], d) {
              case "s":
                return u(String(_), y, c, f, R, S);
              case "c":
                return u(String.fromCharCode(+_), y, c, f, R);
              case "b":
                return o(_, 2, A, y, c, f, R);
              case "o":
                return o(_, 8, A, y, c, f, R);
              case "x":
                return o(_, 16, A, y, c, f, R);
              case "X":
                return o(_, 16, A, y, c, f, R).toUpperCase();
              case "u":
                return o(_, 10, A, y, c, f, R);
              case "i":
              case "d":
                return h = +_ || 0, h = Math.round(h - h % 1), m = h < 0 ? "-" : T, _ = m + a(String(Math.abs(h)), f,
                  "0", !1), i(_, m, y, c, R);
              case "e":
              case "E":
              case "f":
              case "F":
              case "g":
              case "G":
                return h = +_, m = h < 0 ? "-" : T, E = ["toExponential", "toFixed", "toPrecision"]["efg".indexOf(d
                    .toLowerCase())], p = ["toString", "toUpperCase"]["eEfFgG".indexOf(d) % 2], _ = m + Math.abs(h)[E]
                  (f), i(_, m, y, c, R)[p]();
              default:
                return e
            }
          };
        return n.replace(e, s)
      }
      return e
    }), define("Core/GregorianDate", [], function() {
      "use strict";

      function e(e, t, r, n, a, i, o, u) {
        this.year = e, this.month = t, this.day = r, this.hour = n, this.minute = a, this.second = i, this
          .millisecond = o, this.isLeapSecond = u
      }
      return e
    }), define("Core/isLeapYear", ["./DeveloperError"], function(e) {
      "use strict";

      function t(e) {
        return e % 4 == 0 && e % 100 != 0 || e % 400 == 0
      }
      return t
    }), define("Core/LeapSecond", [], function() {
      "use strict";

      function e(e, t) {
        this.julianDate = e, this.offset = t
      }
      return e
    }), define("Core/TimeConstants", ["./freezeObject"], function(e) {
      "use strict";
      return e({
        SECONDS_PER_MILLISECOND: .001,
        SECONDS_PER_MINUTE: 60,
        MINUTES_PER_HOUR: 60,
        HOURS_PER_DAY: 24,
        SECONDS_PER_HOUR: 3600,
        MINUTES_PER_DAY: 1440,
        SECONDS_PER_DAY: 86400,
        DAYS_PER_JULIAN_CENTURY: 36525,
        PICOSECOND: 1e-9,
        MODIFIED_JULIAN_DATE_DIFFERENCE: 2400000.5
      })
    }), define("Core/TimeStandard", ["./freezeObject"], function(e) {
      "use strict";
      return e({
        UTC: 0,
        TAI: 1
      })
    }), define("Core/JulianDate", ["../ThirdParty/sprintf", "./binarySearch", "./defaultValue", "./defined",
      "./DeveloperError", "./GregorianDate", "./isLeapYear", "./LeapSecond", "./TimeConstants", "./TimeStandard"
    ], function(e, t, r, n, a, i, o, u, s, c) {
      "use strict";

      function l(e, t) {
        return E.compare(e.julianDate, t.julianDate)
      }

      function f(e) {
        y.julianDate = e;
        var r = E.leapSeconds,
          n = t(r, y, l);
        n < 0 && (n = ~n), n >= r.length && (n = r.length - 1);
        var a = r[n].offset;
        if (n > 0) {
          E.secondsDifference(r[n].julianDate, e) > a && (n--, a = r[n].offset)
        }
        E.addSeconds(e, a, e)
      }

      function d(e, r) {
        y.julianDate = e;
        var n = E.leapSeconds,
          a = t(n, y, l);
        if (a < 0 && (a = ~a), 0 === a) return E.addSeconds(e, -n[0].offset, r);
        if (a >= n.length) return E.addSeconds(e, -n[a - 1].offset, r);
        var i = E.secondsDifference(n[a].julianDate, e);
        return 0 === i ? E.addSeconds(e, -n[a].offset, r) : i <= 1 ? void 0 : E.addSeconds(e, -n[--a].offset, r)
      }

      function h(e, t, r) {
        var n = t / s.SECONDS_PER_DAY | 0;
        return e += n, t -= s.SECONDS_PER_DAY * n, t < 0 && (e--, t += s.SECONDS_PER_DAY), r.dayNumber = e, r
          .secondsOfDay = t, r
      }

      function m(e, t, r, n, a, i, o) {
        var u = (t - 14) / 12 | 0,
          c = e + 4800 + u,
          l = (1461 * c / 4 | 0) + (367 * (t - 2 - 12 * u) / 12 | 0) - (3 * ((c + 100) / 100 | 0) / 4 | 0) + r -
          32075;
        (n -= 12) < 0 && (n += 24);
        var f = i + (n * s.SECONDS_PER_HOUR + a * s.SECONDS_PER_MINUTE + o * s.SECONDS_PER_MILLISECOND);
        return f >= 43200 && (l -= 1), [l, f]
      }

      function E(e, t, n) {
        this.dayNumber = void 0, this.secondsOfDay = void 0, e = r(e, 0), t = r(t, 0), n = r(n, c.UTC);
        var a = 0 | e;
        t += (e - a) * s.SECONDS_PER_DAY, h(a, t, this), n === c.UTC && f(this)
      }
      var p = new i,
        _ = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
        y = new u,
        T = /^(\d{4})$/,
        R = /^(\d{4})-(\d{2})$/,
        A = /^(\d{4})-?(\d{3})$/,
        S = /^(\d{4})-?W(\d{2})-?(\d{1})?$/,
        v = /^(\d{4})-?(\d{2})-?(\d{2})$/,
        g = /([Z+\-])?(\d{2})?:?(\d{2})?$/,
        M = /^(\d{2})(\.\d+)?/.source + g.source,
        N = /^(\d{2}):?(\d{2})(\.\d+)?/.source + g.source,
        O = /^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source + g.source;
      E.fromGregorianDate = function(e, t) {
        var r = m(e.year, e.month, e.day, e.hour, e.minute, e.second, e.millisecond);
        return n(t) ? (h(r[0], r[1], t), f(t), t) : new E(r[0], r[1], c.UTC)
      }, E.fromDate = function(e, t) {
        var r = m(e.getUTCFullYear(), e.getUTCMonth() + 1, e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e
          .getUTCSeconds(), e.getUTCMilliseconds());
        return n(t) ? (h(r[0], r[1], t), f(t), t) : new E(r[0], r[1], c.UTC)
      }, E.fromIso8601 = function(e, t) {
        e = e.replace(",", ".");
        var r, a, i, u = e.split("T"),
          s = 1,
          l = 1,
          d = 0,
          p = 0,
          y = 0,
          g = 0,
          I = u[0],
          w = u[1];
        if (null !== (u = I.match(v))) r = +u[1], s = +u[2], l = +u[3];
        else if (null !== (u = I.match(R))) r = +u[1], s = +u[2];
        else if (null !== (u = I.match(T))) r = +u[1];
        else {
          var C;
          if (null !== (u = I.match(A))) r = +u[1], C = +u[2], i = o(r);
          else if (null !== (u = I.match(S))) {
            r = +u[1];
            var x = +u[2],
              P = +u[3] || 0,
              U = new Date(Date.UTC(r, 0, 4));
            C = 7 * x + P - U.getUTCDay() - 3
          }
          a = new Date(Date.UTC(r, 0, 1)), a.setUTCDate(C), s = a.getUTCMonth() + 1, l = a.getUTCDate()
        }
        i = o(r);
        var D;
        if (n(w)) {
          u = w.match(O), null !== u ? (d = +u[1], p = +u[2], y = +u[3], g = 1e3 * +(u[4] || 0), D = 5) : (u = w
            .match(N), null !== u ? (d = +u[1], p = +u[2], y = 60 * +(u[3] || 0), D = 4) : null !== (u = w.match(
              M)) && (d = +u[1], p = 60 * +(u[2] || 0), D = 3));
          var L = u[D],
            F = +u[D + 1],
            b = +(u[D + 2] || 0);
          switch (L) {
            case "+":
              d -= F, p -= b;
              break;
            case "-":
              d += F, p += b;
              break;
            case "Z":
              break;
            default:
              p += new Date(Date.UTC(r, s - 1, l, d, p)).getTimezoneOffset()
          }
        }
        var B = 60 === y;
        for (B && y--; p >= 60;) p -= 60, d++;
        for (; d >= 24;) d -= 24, l++;
        for (a = i && 2 === s ? 29 : _[s - 1]; l > a;) l -= a, s++, s > 12 && (s -= 12, r++), a = i && 2 === s ?
          29 : _[s - 1];
        for (; p < 0;) p += 60, d--;
        for (; d < 0;) d += 24, l--;
        for (; l < 1;) s--, s < 1 && (s += 12, r--), a = i && 2 === s ? 29 : _[s - 1], l += a;
        var z = m(r, s, l, d, p, y, g);
        return n(t) ? (h(z[0], z[1], t), f(t)) : t = new E(z[0], z[1], c.UTC), B && E.addSeconds(t, 1, t), t
      }, E.now = function(e) {
        return E.fromDate(new Date, e)
      };
      var I = new E(0, 0, c.TAI);
      return E.toGregorianDate = function(e, t) {
          var r = !1,
            a = d(e, I);
          n(a) || (E.addSeconds(e, -1, I), a = d(I, I), r = !0);
          var o = a.dayNumber,
            u = a.secondsOfDay;
          u >= 43200 && (o += 1);
          var c = o + 68569 | 0,
            l = 4 * c / 146097 | 0;
          c = c - ((146097 * l + 3) / 4 | 0) | 0;
          var f = 4e3 * (c + 1) / 1461001 | 0;
          c = c - (1461 * f / 4 | 0) + 31 | 0;
          var h = 80 * c / 2447 | 0,
            m = c - (2447 * h / 80 | 0) | 0;
          c = h / 11 | 0;
          var p = h + 2 - 12 * c | 0,
            _ = 100 * (l - 49) + f + c | 0,
            y = u / s.SECONDS_PER_HOUR | 0,
            T = u - y * s.SECONDS_PER_HOUR,
            R = T / s.SECONDS_PER_MINUTE | 0;
          T -= R * s.SECONDS_PER_MINUTE;
          var A = 0 | T,
            S = (T - A) / s.SECONDS_PER_MILLISECOND;
          return y += 12, y > 23 && (y -= 24), r && (A += 1), n(t) ? (t.year = _, t.month = p, t.day = m, t.hour = y,
            t.minute = R, t.second = A, t.millisecond = S, t.isLeapSecond = r, t) : new i(_, p, m, y, R, A, S, r)
        }, E.toDate = function(e) {
          var t = E.toGregorianDate(e, p),
            r = t.second;
          return t.isLeapSecond && (r -= 1), new Date(Date.UTC(t.year, t.month - 1, t.day, t.hour, t.minute, r, t
            .millisecond))
        }, E.toIso8601 = function(t, r) {
          var a, i = E.toGregorianDate(t, p);
          return n(r) || 0 === i.millisecond ? n(r) && 0 !== r ? (a = (.01 * i.millisecond).toFixed(r).replace(".",
              "").slice(0, r), e("%04d-%02d-%02dT%02d:%02d:%02d.%sZ", i.year, i.month, i.day, i.hour, i.minute, i
              .second, a)) : e("%04d-%02d-%02dT%02d:%02d:%02dZ", i.year, i.month, i.day, i.hour, i.minute, i.second) :
            (a = (.01 * i.millisecond).toString().replace(".", ""), e("%04d-%02d-%02dT%02d:%02d:%02d.%sZ", i.year, i
              .month, i.day, i.hour, i.minute, i.second, a))
        }, E.clone = function(e, t) {
          if (n(e)) return n(t) ? (t.dayNumber = e.dayNumber, t.secondsOfDay = e.secondsOfDay, t) : new E(e.dayNumber,
            e.secondsOfDay, c.TAI)
        }, E.compare = function(e, t) {
          var r = e.dayNumber - t.dayNumber;
          return 0 !== r ? r : e.secondsOfDay - t.secondsOfDay
        }, E.equals = function(e, t) {
          return e === t || n(e) && n(t) && e.dayNumber === t.dayNumber && e.secondsOfDay === t.secondsOfDay
        }, E.equalsEpsilon = function(e, t, r) {
          return e === t || n(e) && n(t) && Math.abs(E.secondsDifference(e, t)) <= r
        }, E.totalDays = function(e) {
          return e.dayNumber + e.secondsOfDay / s.SECONDS_PER_DAY
        }, E.secondsDifference = function(e, t) {
          return (e.dayNumber - t.dayNumber) * s.SECONDS_PER_DAY + (e.secondsOfDay - t.secondsOfDay)
        }, E.daysDifference = function(e, t) {
          return e.dayNumber - t.dayNumber + (e.secondsOfDay - t.secondsOfDay) / s.SECONDS_PER_DAY
        }, E.computeTaiMinusUtc = function(e) {
          y.julianDate = e;
          var r = E.leapSeconds,
            n = t(r, y, l);
          return n < 0 && (n = ~n, --n < 0 && (n = 0)), r[n].offset
        }, E.addSeconds = function(e, t, r) {
          return h(e.dayNumber, e.secondsOfDay + t, r)
        }, E.addMinutes = function(e, t, r) {
          var n = e.secondsOfDay + t * s.SECONDS_PER_MINUTE;
          return h(e.dayNumber, n, r)
        }, E.addHours = function(e, t, r) {
          var n = e.secondsOfDay + t * s.SECONDS_PER_HOUR;
          return h(e.dayNumber, n, r)
        }, E.addDays = function(e, t, r) {
          return h(e.dayNumber + t, e.secondsOfDay, r)
        }, E.lessThan = function(e, t) {
          return E.compare(e, t) < 0
        }, E.lessThanOrEquals = function(e, t) {
          return E.compare(e, t) <= 0
        }, E.greaterThan = function(e, t) {
          return E.compare(e, t) > 0
        }, E.greaterThanOrEquals = function(e, t) {
          return E.compare(e, t) >= 0
        }, E.prototype.clone = function(e) {
          return E.clone(this, e)
        }, E.prototype.equals = function(e) {
          return E.equals(this, e)
        }, E.prototype.equalsEpsilon = function(e, t) {
          return E.equalsEpsilon(this, e, t)
        }, E.prototype.toString = function() {
          return E.toIso8601(this)
        },
        E.leapSeconds = [new u(new E(2441317, 43210, c.TAI), 10), new u(new E(2441499, 43211, c.TAI), 11), new u(
          new E(2441683, 43212, c.TAI), 12), new u(new E(2442048, 43213, c.TAI), 13), new u(new E(2442413, 43214, c
          .TAI), 14), new u(new E(2442778, 43215, c.TAI), 15), new u(new E(2443144, 43216, c.TAI), 16), new u(new E(
          2443509, 43217, c.TAI), 17), new u(new E(2443874, 43218, c.TAI), 18), new u(new E(2444239, 43219, c.TAI),
          19), new u(new E(2444786, 43220, c.TAI), 20), new u(new E(2445151, 43221, c.TAI), 21), new u(new E(
          2445516, 43222, c.TAI), 22), new u(new E(2446247, 43223, c.TAI), 23), new u(new E(2447161, 43224, c.TAI),
          24), new u(new E(2447892, 43225, c.TAI), 25), new u(new E(2448257, 43226, c.TAI), 26), new u(new E(
          2448804, 43227, c.TAI), 27), new u(new E(2449169, 43228, c.TAI), 28), new u(new E(2449534, 43229, c.TAI),
          29), new u(new E(2450083, 43230, c.TAI), 30), new u(new E(2450630, 43231, c.TAI), 31), new u(new E(
          2451179, 43232, c.TAI), 32), new u(new E(2453736, 43233, c.TAI), 33), new u(new E(2454832, 43234, c.TAI),
          34), new u(new E(2456109, 43235, c.TAI), 35), new u(new E(2457204, 43236, c.TAI), 36), new u(new E(
          2457754, 43237, c.TAI), 37)], E
    }), define("ThirdParty/Uri", [], function() {
      function e(t) {
        if (t instanceof e) this.scheme = t.scheme, this.authority = t.authority, this.path = t.path, this.query = t
          .query, this.fragment = t.fragment;
        else if (t) {
          var r = n.exec(t);
          this.scheme = r[1], this.authority = r[2], this.path = r[3], this.query = r[4], this.fragment = r[5]
        }
      }

      function t(e) {
        var t = unescape(e);
        return i.test(t) ? t : e.toUpperCase()
      }

      function r(e, t, r, n) {
        return (t || "") + r.toLowerCase() + (n || "")
      }
      e.prototype.scheme = null, e.prototype.authority = null, e.prototype.path = "", e.prototype.query = null, e
        .prototype.fragment = null;
      var n = new RegExp("^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$");
      e.prototype.getScheme = function() {
        return this.scheme
      }, e.prototype.getAuthority = function() {
        return this.authority
      }, e.prototype.getPath = function() {
        return this.path
      }, e.prototype.getQuery = function() {
        return this.query
      }, e.prototype.getFragment = function() {
        return this.fragment
      }, e.prototype.isAbsolute = function() {
        return !!this.scheme && !this.fragment
      }, e.prototype.isSameDocumentAs = function(e) {
        return e.scheme == this.scheme && e.authority == this.authority && e.path == this.path && e.query == this
          .query
      }, e.prototype.equals = function(e) {
        return this.isSameDocumentAs(e) && e.fragment == this.fragment
      }, e.prototype.normalize = function() {
        this.removeDotSegments(), this.scheme && (this.scheme = this.scheme.toLowerCase()), this.authority && (this
          .authority = this.authority.replace(o, r).replace(a, t)), this.path && (this.path = this.path.replace(a,
          t)), this.query && (this.query = this.query.replace(a, t)), this.fragment && (this.fragment = this
          .fragment.replace(a, t))
      };
      var a = /%[0-9a-z]{2}/gi,
        i = /[a-zA-Z0-9\-\._~]/,
        o = /(.*@)?([^@:]*)(:.*)?/;
      return e.prototype.resolve = function(t) {
        var r = new e;
        return this.scheme ? (r.scheme = this.scheme, r.authority = this.authority, r.path = this.path, r.query =
            this.query) : (r.scheme = t.scheme, this.authority ? (r.authority = this.authority, r.path = this.path,
            r.query = this.query) : (r.authority = t.authority, "" == this.path ? (r.path = t.path, r.query = this
            .query || t.query) : ("/" == this.path.charAt(0) ? (r.path = this.path, r.removeDotSegments()) : (t
            .authority && "" == t.path ? r.path = "/" + this.path : r.path = t.path.substring(0, t.path
              .lastIndexOf("/") + 1) + this.path, r.removeDotSegments()), r.query = this.query))), r.fragment = this
          .fragment, r
      }, e.prototype.removeDotSegments = function() {
        var e, t = this.path.split("/"),
          r = [],
          n = "" == t[0];
        n && t.shift();
        for ("" == t[0] && t.shift(); t.length;) e = t.shift(), ".." == e ? r.pop() : "." != e && r.push(e);
        "." != e && ".." != e || r.push(""), n && r.unshift(""), this.path = r.join("/")
      }, e.prototype.toString = function() {
        var e = "";
        return this.scheme && (e += this.scheme + ":"), this.authority && (e += "//" + this.authority), e += this
          .path, this.query && (e += "?" + this.query), this.fragment && (e += "#" + this.fragment), e
      }, e
    }), define("Core/appendForwardSlash", [], function() {
      "use strict";

      function e(e) {
        return 0 !== e.length && "/" === e[e.length - 1] || (e += "/"), e
      }
      return e
    }), define("Core/clone", ["./defaultValue"], function(e) {
      "use strict";

      function t(r, n) {
        if (null === r || "object" != typeof r) return r;
        n = e(n, !1);
        var a = new r.constructor;
        for (var i in r)
          if (r.hasOwnProperty(i)) {
            var o = r[i];
            n && (o = t(o, n)), a[i] = o
          } return a
      }
      return t
    }), define("Core/combine", ["./defaultValue", "./defined"], function(e, t) {
      "use strict";

      function r(n, a, i) {
        i = e(i, !1);
        var o, u, s, c = {},
          l = t(n),
          f = t(a);
        if (l)
          for (o in n) n.hasOwnProperty(o) && (u = n[o], f && i && "object" == typeof u && a.hasOwnProperty(o) ? (s =
            a[o], c[o] = "object" == typeof s ? r(u, s, i) : u) : c[o] = u);
        if (f)
          for (o in a) a.hasOwnProperty(o) && !c.hasOwnProperty(o) && (s = a[o], c[o] = s);
        return c
      }
      return r
    }), define("Core/oneTimeWarning", ["./defaultValue", "./defined", "./DeveloperError"], function(e, t, r) {
      "use strict";

      function n(r, n) {
        t(a[r]) || (a[r] = !0, console.warn(e(n, r)))
      }
      var a = {};
      return n.geometryOutlines =
        "Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.",
        n.geometryZIndex =
        "Entity geometry with zIndex are unsupported when height or extrudedHeight are defined.  zIndex will be ignored",
        n
    }), define("Core/deprecationWarning", ["./defined", "./DeveloperError", "./oneTimeWarning"], function(e, t, r) {
      "use strict";

      function n(e, t) {
        r(e, t)
      }
      return n
    }), define("Core/Fullscreen", ["./defined", "./defineProperties"], function(e, t) {
      "use strict";
      var r, n = {
          requestFullscreen: void 0,
          exitFullscreen: void 0,
          fullscreenEnabled: void 0,
          fullscreenElement: void 0,
          fullscreenchange: void 0,
          fullscreenerror: void 0
        },
        a = {};
      return t(a, {
        element: {
          get: function() {
            if (a.supportsFullscreen()) return document[n.fullscreenElement]
          }
        },
        changeEventName: {
          get: function() {
            if (a.supportsFullscreen()) return n.fullscreenchange
          }
        },
        errorEventName: {
          get: function() {
            if (a.supportsFullscreen()) return n.fullscreenerror
          }
        },
        enabled: {
          get: function() {
            if (a.supportsFullscreen()) return document[n.fullscreenEnabled]
          }
        },
        fullscreen: {
          get: function() {
            if (a.supportsFullscreen()) return null !== a.element
          }
        }
      }), a.supportsFullscreen = function() {
        if (e(r)) return r;
        r = !1;
        var t = document.body;
        if ("function" == typeof t.requestFullscreen) return n.requestFullscreen = "requestFullscreen", n
          .exitFullscreen = "exitFullscreen", n.fullscreenEnabled = "fullscreenEnabled", n.fullscreenElement =
          "fullscreenElement", n.fullscreenchange = "fullscreenchange", n.fullscreenerror = "fullscreenerror",
          r = !0;
        for (var a, i = ["webkit", "moz", "o", "ms", "khtml"], o = 0, u = i.length; o < u; ++o) {
          var s = i[o];
          a = s + "RequestFullscreen", "function" == typeof t[a] ? (n.requestFullscreen = a, r = !0) : (a = s +
              "RequestFullScreen", "function" == typeof t[a] && (n.requestFullscreen = a, r = !0)), a = s +
            "ExitFullscreen", "function" == typeof document[a] ? n.exitFullscreen = a : (a = s + "CancelFullScreen",
              "function" == typeof document[a] && (n.exitFullscreen = a)), a = s + "FullscreenEnabled", void 0 !==
            document[a] ? n.fullscreenEnabled = a : (a = s + "FullScreenEnabled", void 0 !== document[a] && (n
              .fullscreenEnabled = a)), a = s + "FullscreenElement", void 0 !== document[a] ? n.fullscreenElement =
            a : (a = s + "FullScreenElement", void 0 !== document[a] && (n.fullscreenElement = a)), a = s +
            "fullscreenchange", void 0 !== document["on" + a] && ("ms" === s && (a = "MSFullscreenChange"), n
              .fullscreenchange = a), a = s + "fullscreenerror", void 0 !== document["on" + a] && ("ms" === s && (
              a = "MSFullscreenError"), n.fullscreenerror = a)
        }
        return r
      }, a.requestFullscreen = function(e, t) {
        a.supportsFullscreen() && e[n.requestFullscreen]({
          vrDisplay: t
        })
      }, a.exitFullscreen = function() {
        a.supportsFullscreen() && document[n.exitFullscreen]()
      }, a
    }), define("Core/FeatureDetection", ["./defaultValue", "./defined", "./Fullscreen"], function(e, t, r) {
      "use strict";

      function n(e) {
        for (var t = e.split("."), r = 0, n = t.length; r < n; ++r) t[r] = parseInt(t[r], 10);
        return t
      }

      function a() {
        if (!t(S) && (S = !1, !d())) {
          var e = / Chrome\/([\.0-9]+)/.exec(A.userAgent);
          null !== e && (S = !0, v = n(e[1]))
        }
        return S
      }

      function i() {
        return a() && v
      }

      function o() {
        if (!t(g) && (g = !1, !a() && !d() && / Safari\/[\.0-9]+/.test(A.userAgent))) {
          var e = / Version\/([\.0-9]+)/.exec(A.userAgent);
          null !== e && (g = !0, M = n(e[1]))
        }
        return g
      }

      function u() {
        return o() && M
      }

      function s() {
        if (!t(N)) {
          N = !1;
          var e = / AppleWebKit\/([\.0-9]+)(\+?)/.exec(A.userAgent);
          null !== e && (N = !0, O = n(e[1]), O.isNightly = !!e[2])
        }
        return N
      }

      function c() {
        return s() && O
      }

      function l() {
        if (!t(I)) {
          I = !1;
          var e;
          "Microsoft Internet Explorer" === A.appName ? null !== (e = /MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(A
            .userAgent)) && (I = !0, w = n(e[1])) : "Netscape" === A.appName && null !== (e =
              /Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(A.userAgent)) && (I = !0, w = n(e[1]))
        }
        return I
      }

      function f() {
        return l() && w
      }

      function d() {
        if (!t(C)) {
          C = !1;
          var e = / Edge\/([\.0-9]+)/.exec(A.userAgent);
          null !== e && (C = !0, x = n(e[1]))
        }
        return C
      }

      function h() {
        return d() && x
      }

      function m() {
        if (!t(P)) {
          P = !1;
          var e = /Firefox\/([\.0-9]+)/.exec(A.userAgent);
          null !== e && (P = !0, U = n(e[1]))
        }
        return P
      }

      function E() {
        return t(D) || (D = /Windows/i.test(A.appVersion)), D
      }

      function p() {
        return m() && U
      }

      function _() {
        return t(L) || (L = "object" == typeof process && "[object process]" === Object.prototype.toString.call(
          process)), L
      }

      function y() {
        return t(F) || (F = "undefined" != typeof PointerEvent && (!t(A.pointerEnabled) || A.pointerEnabled)), F
      }

      function T() {
        if (!t(B)) {
          var e = document.createElement("canvas");
          e.setAttribute("style", "image-rendering: -moz-crisp-edges;image-rendering: pixelated;");
          var r = e.style.imageRendering;
          B = t(r) && "" !== r, B && (b = r)
        }
        return B
      }

      function R() {
        return T() ? b : void 0
      }
      var A;
      A = "undefined" != typeof navigator ? navigator : {};
      var S, v, g, M, N, O, I, w, C, x, P, U, D, L, F, b, B, z = [];
      "undefined" != typeof ArrayBuffer && (z.push(Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array,
        Uint32Array, Float32Array, Float64Array), "undefined" != typeof Uint8ClampedArray && z.push(
        Uint8ClampedArray), "undefined" != typeof CanvasPixelArray && z.push(CanvasPixelArray));
      var q = {
        isChrome: a,
        chromeVersion: i,
        isSafari: o,
        safariVersion: u,
        isWebkit: s,
        webkitVersion: c,
        isInternetExplorer: l,
        internetExplorerVersion: f,
        isEdge: d,
        edgeVersion: h,
        isFirefox: m,
        firefoxVersion: p,
        isWindows: E,
        isNodeJs: _,
        hardwareConcurrency: e(A.hardwareConcurrency, 3),
        supportsPointerEvents: y,
        supportsImageRenderingPixelated: T,
        imageRenderingValue: R,
        typedArrayTypes: z
      };
      return q.supportsFullscreen = function() {
        return r.supportsFullscreen()
      }, q.supportsTypedArrays = function() {
        return "undefined" != typeof ArrayBuffer
      }, q.supportsWebWorkers = function() {
        return "undefined" != typeof Worker
      }, q.supportsWebAssembly = function() {
        return "undefined" != typeof WebAssembly && !q.isEdge()
      }, q
    }), define("Core/getAbsoluteUri", ["../ThirdParty/Uri", "./defaultValue", "./defined", "./DeveloperError"],
      function(e, t, r, n) {
        "use strict";

        function a(e, t) {
          var r;
          return "undefined" != typeof document && (r = document), a._implementation(e, t, r)
        }
        return a._implementation = function(n, a, i) {
          if (!r(a)) {
            if (void 0 === i) return n;
            a = t(i.baseURI, i.location.href)
          }
          var o = new e(a);
          return new e(n).resolve(o).toString()
        }, a
      }), define("Core/getBaseUri", ["../ThirdParty/Uri", "./defined", "./DeveloperError"], function(e, t, r) {
      "use strict";

      function n(r, n) {
        var a = "",
          i = r.lastIndexOf("/");
        return -1 !== i && (a = r.substring(0, i + 1)), n ? (r = new e(r), t(r.query) && (a += "?" + r.query), t(r
          .fragment) && (a += "#" + r.fragment), a) : a
      }
      return n
    }), define("Core/getExtensionFromUri", ["../ThirdParty/Uri", "./defined", "./DeveloperError"], function(e, t, r) {
      "use strict";

      function n(t) {
        var r = new e(t);
        r.normalize();
        var n = r.path,
          a = n.lastIndexOf("/");
        return -1 !== a && (n = n.substr(a + 1)), a = n.lastIndexOf("."), n = -1 === a ? "" : n.substr(a + 1)
      }
      return n
    }), define("Core/isBlobUri", ["./Check"], function(e) {
      "use strict";

      function t(e) {
        return r.test(e)
      }
      var r = /^blob:/i;
      return t
    }), define("Core/isCrossOriginUrl", ["./defined"], function(e) {
      "use strict";

      function t(t) {
        e(r) || (r = document.createElement("a")), r.href = window.location.href;
        var n = r.host,
          a = r.protocol;
        return r.href = t, r.href = r.href, a !== r.protocol || n !== r.host
      }
      var r;
      return t
    }), define("Core/isDataUri", ["./Check"], function(e) {
      "use strict";

      function t(e) {
        return r.test(e)
      }
      var r = /^data:/i;
      return t
    }), define("Core/isArray", ["./defined"], function(e) {
      "use strict";
      var t = Array.isArray;
      return e(t) || (t = function(e) {
        return "[object Array]" === Object.prototype.toString.call(e)
      }), t
    }), define("Core/objectToQuery", ["./defined", "./DeveloperError", "./isArray"], function(e, t, r) {
      "use strict";

      function n(e) {
        var t = "";
        for (var n in e)
          if (e.hasOwnProperty(n)) {
            var a = e[n],
              i = encodeURIComponent(n) + "=";
            if (r(a))
              for (var o = 0, u = a.length; o < u; ++o) t += i + encodeURIComponent(a[o]) + "&";
            else t += i + encodeURIComponent(a) + "&"
          } return t = t.slice(0, -1)
      }
      return n
    }), define("Core/queryToObject", ["./defined", "./DeveloperError", "./isArray"], function(e, t, r) {
      "use strict";

      function n(t) {
        var n = {};
        if ("" === t) return n;
        for (var a = t.replace(/\+/g, "%20").split(/[&;]/), i = 0, o = a.length; i < o; ++i) {
          var u = a[i].split("="),
            s = decodeURIComponent(u[0]),
            c = u[1];
          c = e(c) ? decodeURIComponent(c) : "";
          var l = n[s];
          "string" == typeof l ? n[s] = [l, c] : r(l) ? l.push(c) : n[s] = c
        }
        return n
      }
      return n
    }), define("Core/RequestState", ["../Core/freezeObject"], function(e) {
      "use strict";
      return e({
        UNISSUED: 0,
        ISSUED: 1,
        ACTIVE: 2,
        RECEIVED: 3,
        CANCELLED: 4,
        FAILED: 5
      })
    }), define("Core/RequestType", ["../Core/freezeObject"], function(e) {
      "use strict";
      return e({
        TERRAIN: 0,
        IMAGERY: 1,
        TILES3D: 2,
        OTHER: 3
      })
    }), define("Core/Request", ["./defaultValue", "./defined", "./RequestState", "./RequestType"], function(e, t, r,
    n) {
      "use strict";

      function a(t) {
        t = e(t, e.EMPTY_OBJECT);
        var a = e(t.throttleByServer, !1),
          i = a || e(t.throttle, !1);
        this.url = t.url, this.requestFunction = t.requestFunction, this.cancelFunction = t.cancelFunction, this
          .priorityFunction = t.priorityFunction, this.priority = e(t.priority, 0), this.throttle = i, this
          .throttleByServer = a, this.type = e(t.type, n.OTHER), this.serverKey = void 0, this.state = r.UNISSUED,
          this.deferred = void 0, this.cancelled = !1
      }
      return a.prototype.cancel = function() {
        this.cancelled = !0
      }, a.prototype.clone = function(e) {
        return t(e) ? (e.url = this.url, e.requestFunction = this.requestFunction, e.cancelFunction = this
          .cancelFunction, e.priorityFunction = this.priorityFunction, e.priority = this.priority, e.throttle =
          this.throttle, e.throttleByServer = this.throttleByServer, e.type = this.type, e.serverKey = this
          .serverKey, e.state = this.RequestState.UNISSUED, e.deferred = void 0, e.cancelled = !1, e) : new a(
          this)
      }, a
    }), define("Core/parseResponseHeaders", [], function() {
      "use strict";

      function e(e) {
        var t = {};
        if (!e) return t;
        for (var r = e.split("\r\n"), n = 0; n < r.length; ++n) {
          var a = r[n],
            i = a.indexOf(": ");
          if (i > 0) {
            var o = a.substring(0, i),
              u = a.substring(i + 2);
            t[o] = u
          }
        }
        return t
      }
      return e
    }), define("Core/RequestErrorEvent", ["./defined", "./parseResponseHeaders"], function(e, t) {
      "use strict";

      function r(e, r, n) {
        this.statusCode = e, this.response = r, this.responseHeaders = n, "string" == typeof this.responseHeaders && (
          this.responseHeaders = t(this.responseHeaders))
      }
      return r.prototype.toString = function() {
        var t = "Request has failed.";
        return e(this.statusCode) && (t += " Status Code: " + this.statusCode), t
      }, r
    }), define("Core/Event", ["./Check", "./defined", "./defineProperties"], function(e, t, r) {
      "use strict";

      function n() {
        this._listeners = [], this._scopes = [], this._toRemove = [], this._insideRaiseEvent = !1
      }

      function a(e, t) {
        return t - e
      }
      return r(n.prototype, {
        numberOfListeners: {
          get: function() {
            return this._listeners.length - this._toRemove.length
          }
        }
      }), n.prototype.addEventListener = function(e, t) {
        this._listeners.push(e), this._scopes.push(t);
        var r = this;
        return function() {
          r.removeEventListener(e, t)
        }
      }, n.prototype.removeEventListener = function(e, t) {
        for (var r = this._listeners, n = this._scopes, a = -1, i = 0; i < r.length; i++)
          if (r[i] === e && n[i] === t) {
            a = i;
            break
          } return -1 !== a && (this._insideRaiseEvent ? (this._toRemove.push(a), r[a] = void 0, n[a] = void 0) : (r
          .splice(a, 1), n.splice(a, 1)), !0)
      }, n.prototype.raiseEvent = function() {
        this._insideRaiseEvent = !0;
        var e, r = this._listeners,
          n = this._scopes,
          i = r.length;
        for (e = 0; e < i; e++) {
          var o = r[e];
          t(o) && r[e].apply(n[e], arguments)
        }
        var u = this._toRemove;
        if ((i = u.length) > 0) {
          for (u.sort(a), e = 0; e < i; e++) {
            var s = u[e];
            r.splice(s, 1), n.splice(s, 1)
          }
          u.length = 0
        }
        this._insideRaiseEvent = !1
      }, n
    }), define("Core/Heap", ["./Check", "./defaultValue", "./defined", "./defineProperties"], function(e, t, r, n) {
      "use strict";

      function a(e) {
        this._comparator = e.comparator, this._array = [], this._length = 0, this._maximumLength = void 0
      }

      function i(e, t, r) {
        var n = e[t];
        e[t] = e[r], e[r] = n
      }
      return n(a.prototype, {
        length: {
          get: function() {
            return this._length
          }
        },
        internalArray: {
          get: function() {
            return this._array
          }
        },
        maximumLength: {
          get: function() {
            return this._maximumLength
          },
          set: function(e) {
            this._maximumLength = e, this._length > e && e > 0 && (this._length = e, this._array.length = e)
          }
        },
        comparator: {
          get: function() {
            return this._comparator
          }
        }
      }), a.prototype.reserve = function(e) {
        e = t(e, this._length), this._array.length = e
      }, a.prototype.heapify = function(e) {
        e = t(e, 0);
        for (var r = this._length, n = this._comparator, a = this._array, o = -1, u = !0; u;) {
          var s = 2 * (e + 1),
            c = s - 1;
          o = c < r && n(a[c], a[e]) < 0 ? c : e, s < r && n(a[s], a[o]) < 0 && (o = s), o !== e ? (i(a, o, e), e =
            o) : u = !1
        }
      }, a.prototype.resort = function() {
        for (var e = this._length, t = Math.ceil(e / 2); t >= 0; --t) this.heapify(t)
      }, a.prototype.insert = function(e) {
        var t = this._array,
          n = this._comparator,
          a = this._maximumLength,
          o = this._length++;
        for (o < t.length ? t[o] = e : t.push(e); 0 !== o;) {
          var u = Math.floor((o - 1) / 2);
          if (!(n(t[o], t[u]) < 0)) break;
          i(t, o, u), o = u
        }
        var s;
        return r(a) && this._length > a && (s = t[a], this._length = a), s
      }, a.prototype.pop = function(e) {
        if (e = t(e, 0), 0 !== this._length) {
          var r = this._array,
            n = r[e];
          return i(r, e, --this._length), this.heapify(e), n
        }
      }, a
    }), define("Core/RequestScheduler", ["../ThirdParty/Uri", "../ThirdParty/when", "./Check", "./defaultValue",
      "./defined", "./defineProperties", "./Event", "./Heap", "./isBlobUri", "./isDataUri", "./RequestState"
    ], function(e, t, r, n, a, i, o, u, s, c, l) {
      "use strict";

      function f(e, t) {
        return e.priority - t.priority
      }

      function d() {}

      function h(e) {
        a(e.priorityFunction) && (e.priority = e.priorityFunction())
      }

      function m(e) {
        var t = n(d.requestsByServer[e], d.maximumRequestsPerServer);
        return N[e] < t
      }

      function E(e) {
        return e.state === l.UNISSUED && (e.state = l.ISSUED, e.deferred = t.defer()), e.deferred.promise
      }

      function p(e) {
        return function(t) {
          e.state !== l.CANCELLED && (--S.numberOfActiveRequests, --N[e.serverKey], I.raiseEvent(), e.state = l
            .RECEIVED, e.deferred.resolve(t))
        }
      }

      function _(e) {
        return function(t) {
          e.state !== l.CANCELLED && (++S.numberOfFailedRequests, --S.numberOfActiveRequests, --N[e.serverKey], I
            .raiseEvent(t), e.state = l.FAILED, e.deferred.reject(t))
        }
      }

      function y(e) {
        var t = E(e);
        return e.state = l.ACTIVE, M.push(e), ++S.numberOfActiveRequests, ++S.numberOfActiveRequestsEver, ++N[e
          .serverKey], e.requestFunction().then(p(e)).otherwise(_(e)), t
      }

      function T(e) {
        var t = e.state === l.ACTIVE;
        e.state = l.CANCELLED, ++S.numberOfCancelledRequests, e.deferred.reject(), t && (--S.numberOfActiveRequests,
          --N[e.serverKey], ++S.numberOfCancelledActiveRequests), a(e.cancelFunction) && e.cancelFunction()
      }

      function R() {
        S.numberOfAttemptedRequests = 0, S.numberOfCancelledRequests = 0, S.numberOfCancelledActiveRequests = 0
      }

      function A() {
        d.debugShowStatistics && (S.numberOfAttemptedRequests > 0 && console.log("Number of attempted requests: " + S
            .numberOfAttemptedRequests), S.numberOfActiveRequests > 0 && console.log("Number of active requests: " +
            S.numberOfActiveRequests), S.numberOfCancelledRequests > 0 && console.log(
            "Number of cancelled requests: " + S.numberOfCancelledRequests), S.numberOfCancelledActiveRequests >
          0 && console.log("Number of cancelled active requests: " + S.numberOfCancelledActiveRequests), S
          .numberOfFailedRequests > 0 && console.log("Number of failed requests: " + S.numberOfFailedRequests), R())
      }
      var S = {
          numberOfAttemptedRequests: 0,
          numberOfActiveRequests: 0,
          numberOfCancelledRequests: 0,
          numberOfCancelledActiveRequests: 0,
          numberOfFailedRequests: 0,
          numberOfActiveRequestsEver: 0
        },
        v = 20,
        g = new u({
          comparator: f
        });
      g.maximumLength = v, g.reserve(v);
      var M = [],
        N = {},
        O = "undefined" != typeof document ? new e(document.location.href) : new e,
        I = new o;
      return d.maximumRequests = 50, d.maximumRequestsPerServer = 6, d.requestsByServer = {
        "api.cesium.com:443": 18,
        "assets.cesium.com:443": 18
      }, d.throttleRequests = !0, d.debugShowStatistics = !1, d.requestCompletedEvent = I, i(d, {
        statistics: {
          get: function() {
            return S
          }
        },
        priorityHeapLength: {
          get: function() {
            return v
          },
          set: function(e) {
            if (e < v)
              for (; g.length > e;) {
                var t = g.pop();
                T(t)
              }
            v = e, g.maximumLength = e, g.reserve(e)
          }
        }
      }), d.update = function() {
        var e, t, r = 0,
          n = M.length;
        for (e = 0; e < n; ++e) t = M[e], t.cancelled && T(t), t.state === l.ACTIVE ? r > 0 && (M[e - r] = t) : ++r;
        M.length -= r;
        var a = g.internalArray,
          i = g.length;
        for (e = 0; e < i; ++e) h(a[e]);
        g.resort();
        for (var o = Math.max(d.maximumRequests - M.length, 0), u = 0; u < o && g.length > 0;) t = g.pop(), t
          .cancelled ? T(t) : !t.throttleByServer || m(t.serverKey) ? (y(t), ++u) : T(t);
        A()
      }, d.getServerKey = function(t) {
        var r = new e(t).resolve(O);
        r.normalize();
        var n = r.authority;
        /:/.test(n) || (n = n + ":" + ("https" === r.scheme ? "443" : "80"));
        var i = N[n];
        return a(i) || (N[n] = 0), n
      }, d.request = function(e) {
        if (c(e.url) || s(e.url)) return I.raiseEvent(), e.state = l.RECEIVED, e.requestFunction();
        if (++S.numberOfAttemptedRequests, a(e.serverKey) || (e.serverKey = d.getServerKey(e.url)), !d
          .throttleRequests || !e.throttle) return y(e);
        if (!(M.length >= d.maximumRequests) && (!e.throttleByServer || m(e.serverKey))) {
          h(e);
          var t = g.insert(e);
          if (a(t)) {
            if (t === e) return;
            T(t)
          }
          return E(e)
        }
      }, d.clearForSpecs = function() {
        for (; g.length > 0;) {
          T(g.pop())
        }
        for (var e = M.length, t = 0; t < e; ++t) T(M[t]);
        M.length = 0, N = {}, S.numberOfAttemptedRequests = 0, S.numberOfActiveRequests = 0, S
          .numberOfCancelledRequests = 0, S.numberOfCancelledActiveRequests = 0, S.numberOfFailedRequests = 0, S
          .numberOfActiveRequestsEver = 0
      }, d.numberOfActiveRequestsByServer = function(e) {
        return N[e]
      }, d.requestHeap = g, d
    }), define("Core/TrustedServers", ["../ThirdParty/Uri", "./defined", "./DeveloperError"], function(e, t, r) {
      "use strict";

      function n(r) {
        var n = new e(r);
        n.normalize();
        var a = n.getAuthority();
        if (t(a)) {
          if (-1 !== a.indexOf("@")) {
            a = a.split("@")[1]
          }
          if (-1 === a.indexOf(":")) {
            var i = n.getScheme();
            if (t(i) || (i = window.location.protocol, i = i.substring(0, i.length - 1)), "http" === i) a += ":80";
            else {
              if ("https" !== i) return;
              a += ":443"
            }
          }
          return a
        }
      }
      var a = {},
        i = {};
      return a.add = function(e, r) {
        var n = e.toLowerCase() + ":" + r;
        t(i[n]) || (i[n] = !0)
      }, a.remove = function(e, r) {
        var n = e.toLowerCase() + ":" + r;
        t(i[n]) && delete i[n]
      }, a.contains = function(e) {
        var r = n(e);
        return !(!t(r) || !t(i[r]))
      }, a.clear = function() {
        i = {}
      }, a
    }), define("Core/Resource", ["../ThirdParty/Uri", "../ThirdParty/when", "./appendForwardSlash", "./Check",
      "./clone", "./combine", "./defaultValue", "./defined", "./defineProperties", "./deprecationWarning",
      "./DeveloperError", "./FeatureDetection", "./freezeObject", "./getAbsoluteUri", "./getBaseUri",
      "./getExtensionFromUri", "./isBlobUri", "./isCrossOriginUrl", "./isDataUri", "./objectToQuery",
      "./queryToObject", "./Request", "./RequestErrorEvent", "./RequestScheduler", "./RequestState", "./RuntimeError",
      "./TrustedServers"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d, h, m, E, p, _, y, T, R, A, S, v, g, M, N) {
      "use strict";

      function O(e, t, r, n) {
        var a = e.query;
        if (!u(a) || 0 === a.length) return {};
        var i;
        if (-1 === a.indexOf("=")) {
          var o = {};
          o[a] = void 0, i = o
        } else i = R(a);
        t._queryParameters = r ? x(i, t._queryParameters, n) : i, e.query = void 0
      }

      function I(e, t) {
        var r = t._queryParameters,
          n = Object.keys(r);
        1 !== n.length || u(r[n[0]]) ? e.query = T(r) : e.query = n[0]
      }

      function w(e, t) {
        return u(e) ? u(e.clone) ? e.clone() : a(e) : t
      }

      function C(e) {
        if (e.state === g.ISSUED || e.state === g.ACTIVE) throw new M("The Resource is already being fetched.");
        e.state = g.UNISSUED, e.deferred = void 0
      }

      function x(e, t, r) {
        if (!r) return i(e, t);
        var n = a(e, !0);
        for (var o in t)
          if (t.hasOwnProperty(o)) {
            var s = n[o],
              c = t[o];
            u(s) ? (Array.isArray(s) || (s = n[o] = [s]), n[o] = s.concat(c)) : n[o] = Array.isArray(c) ? c.slice() :
              c
          } return n
      }

      function P(t) {
        t = o(t, o.EMPTY_OBJECT), "string" == typeof t && (t = {
            url: t
          }), this._url = void 0, this._templateValues = w(t.templateValues, {}), this._queryParameters = w(t
            .queryParameters, {}), this.headers = w(t.headers, {}), this.request = o(t.request, new A), this.proxy = t
          .proxy, this.retryCallback = t.retryCallback, this.retryAttempts = o(t.retryAttempts, 0), this._retryCount =
          0;
        var r = new e(t.url);
        O(r, this, !0, !0), r.fragment = void 0, this._url = r.toString()
      }

      function U(e) {
        var r = e.request;
        r.url = e.url, r.requestFunction = function() {
          var r = e.url,
            n = !1;
          e.isDataUri || e.isBlobUri || (n = e.isCrossOriginUrl);
          var a = t.defer();
          return P._Implementations.createImage(r, n, a), a.promise
        };
        var n = v.request(r);
        if (u(n)) return n.otherwise(function(n) {
          return r.state !== g.FAILED ? t.reject(n) : e.retryOnError(n).then(function(a) {
            return a ? (r.state = g.UNISSUED, r.deferred = void 0, U(e)) : t.reject(n)
          })
        })
      }

      function D(e, r, n) {
        var a = {};
        a[r] = n, e.setQueryParameters(a);
        var i = e.request;
        i.url = e.url, i.requestFunction = function() {
          var r = t.defer();
          return window[n] = function(e) {
            r.resolve(e);
            try {
              delete window[n]
            } catch (e) {
              window[n] = void 0
            }
          }, P._Implementations.loadAndExecuteScript(e.url, n, r), r.promise
        };
        var o = v.request(i);
        if (u(o)) return o.otherwise(function(a) {
          return i.state !== g.FAILED ? t.reject(a) : e.retryOnError(a).then(function(o) {
            return o ? (i.state = g.UNISSUED, i.deferred = void 0, D(e, r, n)) : t.reject(a)
          })
        })
      }

      function L(e, t) {
        var r = decodeURIComponent(t);
        return e ? atob(r) : r
      }

      function F(e, t) {
        for (var r = L(e, t), n = new ArrayBuffer(r.length), a = new Uint8Array(n), i = 0; i < r.length; i++) a[i] = r
          .charCodeAt(i);
        return n
      }

      function b(e, t) {
        t = o(t, "");
        var r = e[1],
          n = !!e[2],
          a = e[3];
        switch (t) {
          case "":
          case "text":
            return L(n, a);
          case "arraybuffer":
            return F(n, a);
          case "blob":
            var i = F(n, a);
            return new Blob([i], {
              type: r
            });
          case "document":
            return (new DOMParser).parseFromString(L(n, a), r);
          case "json":
            return JSON.parse(L(n, a))
        }
      }

      function B(e, t) {
        switch (t) {
          case "text":
            return e.toString("utf8");
          case "json":
            return JSON.parse(e.toString("utf8"));
          default:
            return new Uint8Array(e).buffer
        }
      }

      function z(e, t, r, n, a, i, o) {
        var u = require("url").parse(e),
          s = "https:" === u.protocol ? require("https") : require("http"),
          c = require("zlib"),
          l = {
            protocol: u.protocol,
            hostname: u.hostname,
            port: u.port,
            path: u.path,
            query: u.query,
            method: r,
            headers: a
          };
        s.request(l).on("response", function(e) {
          if (e.statusCode < 200 || e.statusCode >= 300) return void i.reject(new S(e.statusCode, e, e.headers));
          var r = [];
          e.on("data", function(e) {
            r.push(e)
          }), e.on("end", function() {
            var n = Buffer.concat(r);
            "gzip" === e.headers["content-encoding"] ? c.gunzip(n, function(e, r) {
              e ? i.reject(new M("Error decompressing response.")) : i.resolve(B(r, t))
            }) : i.resolve(B(n, t))
          })
        }).on("error", function(e) {
          i.reject(new S)
        }).end()
      }
      var q = function() {
        try {
          var e = new XMLHttpRequest;
          return e.open("GET", "#", !0), e.responseType = "blob", "blob" === e.responseType
        } catch (e) {
          return !1
        }
      }();
      P.createIfNeeded = function(e) {
        return e instanceof P ? e.getDerivedResource({
          request: e.request
        }) : "string" != typeof e ? e : new P({
          url: e
        })
      }, s(P, {
        isBlobSupported: {
          get: function() {
            return q
          }
        }
      }), s(P.prototype, {
        queryParameters: {
          get: function() {
            return this._queryParameters
          }
        },
        templateValues: {
          get: function() {
            return this._templateValues
          }
        },
        url: {
          get: function() {
            return this.getUrlComponent(!0, !0)
          },
          set: function(t) {
            var r = new e(t);
            O(r, this, !1), r.fragment = void 0, this._url = r.toString()
          }
        },
        extension: {
          get: function() {
            return E(this._url)
          }
        },
        isDataUri: {
          get: function() {
            return y(this._url)
          }
        },
        isBlobUri: {
          get: function() {
            return p(this._url)
          }
        },
        isCrossOriginUrl: {
          get: function() {
            return _(this._url)
          }
        },
        hasHeaders: {
          get: function() {
            return Object.keys(this.headers).length > 0
          }
        }
      }), P.prototype.getUrlComponent = function(t, r) {
        if (this.isDataUri) return this._url;
        var n = new e(this._url);
        t && I(n, this);
        var a = n.toString().replace(/%7B/g, "{").replace(/%7D/g, "}"),
          i = this._templateValues,
          o = Object.keys(i);
        if (o.length > 0)
          for (var s = 0; s < o.length; s++) {
            var c = o[s],
              l = i[c];
            a = a.replace(new RegExp("{" + c + "}", "g"), encodeURIComponent(l))
          }
        return r && u(this.proxy) && (a = this.proxy.getURL(a)), a
      }, P.prototype.setQueryParameters = function(e, t) {
        this._queryParameters = t ? x(this._queryParameters, e, !1) : x(e, this._queryParameters, !1)
      }, P.prototype.addQueryParameters = function(e, t) {
        return c("Resource.addQueryParameters",
          "addQueryParameters has been deprecated and will be removed 1.45. Use setQueryParameters or appendQueryParameters instead."
          ), this.setQueryParameters(e, t)
      }, P.prototype.appendQueryParameters = function(e) {
        this._queryParameters = x(e, this._queryParameters, !0)
      }, P.prototype.setTemplateValues = function(e, t) {
        this._templateValues = t ? i(this._templateValues, e) : i(e, this._templateValues)
      }, P.prototype.addTemplateValues = function(e, t) {
        return c("Resource.addTemplateValues",
            "addTemplateValues has been deprecated and will be removed 1.45. Use setTemplateValues."), this
          .setTemplateValues(e, t)
      }, P.prototype.getDerivedResource = function(t) {
        var r = this.clone();
        if (r._retryCount = 0, u(t.url)) {
          var n = new e(t.url);
          O(n, r, !0, o(t.preserveQueryParameters, !1)), n.fragment = void 0, r._url = n.resolve(new e(h(this
            ._url))).toString()
        }
        return u(t.queryParameters) && (r._queryParameters = i(t.queryParameters, r._queryParameters)), u(t
          .templateValues) && (r._templateValues = i(t.templateValues, r.templateValues)), u(t.headers) && (r
          .headers = i(t.headers, r.headers)), u(t.proxy) && (r.proxy = t.proxy), u(t.request) && (r.request = t
          .request), u(t.retryCallback) && (r.retryCallback = t.retryCallback), u(t.retryAttempts) && (r
          .retryAttempts = t.retryAttempts), r
      }, P.prototype.retryOnError = function(e) {
        var r = this.retryCallback;
        if ("function" != typeof r || this._retryCount >= this.retryAttempts) return t(!1);
        var n = this;
        return t(r(this, e)).then(function(e) {
          return ++n._retryCount, e
        })
      }, P.prototype.clone = function(e) {
        return u(e) || (e = new P({
            url: this._url
          })), e._url = this._url, e._queryParameters = a(this._queryParameters), e._templateValues = a(this
            ._templateValues), e.headers = a(this.headers), e.proxy = this.proxy, e.retryCallback = this
          .retryCallback, e.retryAttempts = this.retryAttempts, e._retryCount = 0, e.request = this.request.clone(),
          e
      }, P.prototype.getBaseUri = function(e) {
        return m(this.getUrlComponent(e), e)
      }, P.prototype.appendForwardSlash = function() {
        this._url = r(this._url)
      }, P.prototype.fetchArrayBuffer = function() {
        return this.fetch({
          responseType: "arraybuffer"
        })
      }, P.fetchArrayBuffer = function(e) {
        return new P(e).fetchArrayBuffer()
      }, P.prototype.fetchBlob = function() {
        return this.fetch({
          responseType: "blob"
        })
      }, P.fetchBlob = function(e) {
        return new P(e).fetchBlob()
      }, P.prototype.fetchImage = function(e) {
        if (e = o(e, !1), C(this.request), !q || this.isDataUri || this.isBlobUri || !this.hasHeaders && !e)
        return U(this, !0);
        var r = this.fetchBlob();
        if (u(r)) {
          var n, a;
          return r.then(function(e) {
            if (u(e)) {
              a = e;
              var t = window.URL.createObjectURL(e);
              return n = new P({
                url: t
              }), U(n)
            }
          }).then(function(e) {
            if (u(e)) return window.URL.revokeObjectURL(n.url), e.blob = a, e
          }).otherwise(function(e) {
            return u(n) && window.URL.revokeObjectURL(n.url), t.reject(e)
          })
        }
      }, P.fetchImage = function(e) {
        return new P(e).fetchImage(e.preferBlob)
      }, P.prototype.fetchText = function() {
        return this.fetch({
          responseType: "text"
        })
      }, P.fetchText = function(e) {
        return new P(e).fetchText()
      }, P.prototype.fetchJson = function() {
        var e = this.fetch({
          responseType: "text",
          headers: {
            Accept: "application/json,*/*;q=0.01"
          }
        });
        if (u(e)) return e.then(function(e) {
          if (u(e)) return JSON.parse(e)
        })
      }, P.fetchJson = function(e) {
        return new P(e).fetchJson()
      }, P.prototype.fetchXML = function() {
        return this.fetch({
          responseType: "document",
          overrideMimeType: "text/xml"
        })
      }, P.fetchXML = function(e) {
        return new P(e).fetchXML()
      }, P.prototype.fetchJsonp = function(e) {
        e = o(e, "callback"), C(this.request);
        var t;
        do {
          t = "loadJsonp" + Math.random().toString().substring(2, 8)
        } while (u(window[t]));
        return D(this, e, t)
      }, P.fetchJsonp = function(e) {
        return new P(e).fetchJsonp(e.callbackParameterName)
      }, P.prototype._makeRequest = function(e) {
        var r = this;
        C(r.request);
        var n = r.request;
        n.url = r.url, n.requestFunction = function() {
          var a = e.responseType,
            o = i(e.headers, r.headers),
            s = e.overrideMimeType,
            c = e.method,
            l = e.data,
            f = t.defer(),
            d = P._Implementations.loadWithXhr(r.url, a, c, l, o, f, s);
          return u(d) && u(d.abort) && (n.cancelFunction = function() {
            d.abort()
          }), f.promise
        };
        var a = v.request(n);
        if (u(a)) return a.then(function(e) {
          return e
        }).otherwise(function(a) {
          return n.state !== g.FAILED ? t.reject(a) : r.retryOnError(a).then(function(i) {
            return i ? (n.state = g.UNISSUED, n.deferred = void 0, r.fetch(e)) : t.reject(a)
          })
        })
      };
      var G = /^data:(.*?)(;base64)?,(.*)$/;
      return P.prototype.fetch = function(e) {
          return e = w(e, {}), e.method = "GET", this._makeRequest(e)
        }, P.fetch = function(e) {
          return new P(e).fetch({
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P.prototype.delete = function(e) {
          return e = w(e, {}), e.method = "DELETE", this._makeRequest(e)
        }, P.delete = function(e) {
          return new P(e).delete({
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType,
            data: e.data
          })
        }, P.prototype.head = function(e) {
          return e = w(e, {}), e.method = "HEAD", this._makeRequest(e)
        }, P.head = function(e) {
          return new P(e).head({
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P.prototype.options = function(e) {
          return e = w(e, {}), e.method = "OPTIONS", this._makeRequest(e)
        }, P.options = function(e) {
          return new P(e).options({
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P.prototype.post = function(e, t) {
          return n.defined("data", e), t = w(t, {}), t.method = "POST", t.data = e, this._makeRequest(t)
        }, P.post = function(e) {
          return new P(e).post(e.data, {
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P.prototype.put = function(e, t) {
          return n.defined("data", e), t = w(t, {}), t.method = "PUT", t.data = e, this._makeRequest(t)
        },
        P.put = function(e) {
          return new P(e).put(e.data, {
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P.prototype.patch = function(e, t) {
          return n.defined("data", e), t = w(t, {}), t.method = "PATCH", t.data = e, this._makeRequest(t)
        }, P.patch = function(e) {
          return new P(e).patch(e.data, {
            responseType: e.responseType,
            overrideMimeType: e.overrideMimeType
          })
        }, P._Implementations = {}, P._Implementations.createImage = function(e, t, r) {
          var n = new Image;
          n.onload = function() {
            r.resolve(n)
          }, n.onerror = function(e) {
            r.reject(e)
          }, t && (N.contains(e) ? n.crossOrigin = "use-credentials" : n.crossOrigin = ""), n.src = e
        }, P._Implementations.loadWithXhr = function(e, t, r, n, a, i, o) {
          var s = G.exec(e);
          if (null !== s) return void i.resolve(b(s, t));
          if (f.isNodeJs()) return void z(e, t, r, n, a, i, o);
          var c = new XMLHttpRequest;
          if (N.contains(e) && (c.withCredentials = !0), u(o) && u(c.overrideMimeType) && c.overrideMimeType(o), c
            .open(r, e, !0), u(a))
            for (var l in a) a.hasOwnProperty(l) && c.setRequestHeader(l, a[l]);
          u(t) && (c.responseType = t);
          var d = !1;
          return "string" == typeof e && (d = 0 === e.indexOf("file://") || "undefined" != typeof window &&
            "file://" === window.location.origin), c.onload = function() {
            if ((c.status < 200 || c.status >= 300) && (!d || 0 !== c.status)) return void i.reject(new S(c.status,
              c.response, c.getAllResponseHeaders()));
            var e = c.response,
              n = c.responseType;
            if ("HEAD" === r || "OPTIONS" === r) {
              var a = c.getAllResponseHeaders(),
                o = a.trim().split(/[\r\n]+/),
                s = {};
              return o.forEach(function(e) {
                var t = e.split(": "),
                  r = t.shift();
                s[r] = t.join(": ")
              }), void i.resolve(s)
            }
            if (204 === c.status) i.resolve();
            else if (!u(e) || u(t) && n !== t)
              if ("json" === t && "string" == typeof e) try {
                i.resolve(JSON.parse(e))
              } catch (e) {
                i.reject(e)
              } else("" === n || "document" === n) && u(c.responseXML) && c.responseXML.hasChildNodes() ? i
                .resolve(c.responseXML) : "" !== n && "text" !== n || !u(c.responseText) ? i.reject(new M(
                  "Invalid XMLHttpRequest response type.")) : i.resolve(c.responseText);
              else i.resolve(e)
          }, c.onerror = function(e) {
            i.reject(new S)
          }, c.send(n), c
        }, P._Implementations.loadAndExecuteScript = function(e, t, r) {
          var n = document.createElement("script");
          n.async = !0, n.src = e;
          var a = document.getElementsByTagName("head")[0];
          n.onload = function() {
            n.onload = void 0, a.removeChild(n)
          }, n.onerror = function(e) {
            r.reject(e)
          }, a.appendChild(n)
        }, P._DefaultImplementations = {}, P._DefaultImplementations.createImage = P._Implementations.createImage, P
        ._DefaultImplementations.loadWithXhr = P._Implementations.loadWithXhr, P._DefaultImplementations
        .loadAndExecuteScript = P._Implementations.loadAndExecuteScript, P.DEFAULT = d(new P({
          url: "undefined" == typeof document ? "" : document.location.href.split("?")[0]
        })), P
    }), define("Core/EarthOrientationParameters", ["../ThirdParty/when", "./binarySearch", "./defaultValue",
      "./defined", "./EarthOrientationParametersSample", "./freezeObject", "./JulianDate", "./LeapSecond",
      "./Resource", "./RuntimeError", "./TimeConstants", "./TimeStandard"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f) {
      "use strict";

      function d(t) {
        if (t = r(t, r.EMPTY_OBJECT), this._dates = void 0, this._samples = void 0, this._dateColumn = -1, this
          ._xPoleWanderRadiansColumn = -1, this._yPoleWanderRadiansColumn = -1, this._ut1MinusUtcSecondsColumn = -1,
          this._xCelestialPoleOffsetRadiansColumn = -1, this._yCelestialPoleOffsetRadiansColumn = -1, this
          ._taiMinusUtcSecondsColumn = -1, this._columnCount = 0, this._lastIndex = -1, this._downloadPromise =
          void 0, this._dataError = void 0, this._addNewLeapSeconds = r(t.addNewLeapSeconds, !0), n(t.data)) m(this, t
          .data);
        else if (n(t.url)) {
          var a = s.createIfNeeded(t.url),
            i = this;
          this._downloadPromise = e(a.fetchJson(), function(e) {
            m(i, e)
          }, function() {
            i._dataError = "An error occurred while retrieving the EOP data from the URL " + a.url + "."
          })
        } else m(this, {
          columnNames: ["dateIso8601", "modifiedJulianDateUtc", "xPoleWanderRadians", "yPoleWanderRadians",
            "ut1MinusUtcSeconds", "lengthOfDayCorrectionSeconds", "xCelestialPoleOffsetRadians",
            "yCelestialPoleOffsetRadians", "taiMinusUtcSeconds"
          ],
          samples: []
        })
      }

      function h(e, t) {
        return o.compare(e.julianDate, t)
      }

      function m(e, r) {
        if (!n(r.columnNames)) return void(e._dataError =
          "Error in loaded EOP data: The columnNames property is required.");
        if (!n(r.samples)) return void(e._dataError = "Error in loaded EOP data: The samples property is required.");
        var a = r.columnNames.indexOf("modifiedJulianDateUtc"),
          i = r.columnNames.indexOf("xPoleWanderRadians"),
          s = r.columnNames.indexOf("yPoleWanderRadians"),
          c = r.columnNames.indexOf("ut1MinusUtcSeconds"),
          d = r.columnNames.indexOf("xCelestialPoleOffsetRadians"),
          m = r.columnNames.indexOf("yCelestialPoleOffsetRadians"),
          E = r.columnNames.indexOf("taiMinusUtcSeconds");
        if (a < 0 || i < 0 || s < 0 || c < 0 || d < 0 || m < 0 || E < 0) return void(e._dataError =
          "Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns"
          );
        var p = e._samples = r.samples,
          _ = e._dates = [];
        e._dateColumn = a, e._xPoleWanderRadiansColumn = i, e._yPoleWanderRadiansColumn = s, e
          ._ut1MinusUtcSecondsColumn = c, e._xCelestialPoleOffsetRadiansColumn = d, e
          ._yCelestialPoleOffsetRadiansColumn = m, e._taiMinusUtcSecondsColumn = E, e._columnCount = r.columnNames
          .length, e._lastIndex = void 0;
        for (var y, T = e._addNewLeapSeconds, R = 0, A = p.length; R < A; R += e._columnCount) {
          var S = p[R + a],
            v = p[R + E],
            g = S + l.MODIFIED_JULIAN_DATE_DIFFERENCE,
            M = new o(g, v, f.TAI);
          if (_.push(M), T) {
            if (v !== y && n(y)) {
              var N = o.leapSeconds,
                O = t(N, M, h);
              if (O < 0) {
                var I = new u(M, v);
                N.splice(~O, 0, I)
              }
            }
            y = v
          }
        }
      }

      function E(e, t, r, n, a) {
        var i = r * n;
        a.xPoleWander = t[i + e._xPoleWanderRadiansColumn], a.yPoleWander = t[i + e._yPoleWanderRadiansColumn], a
          .xPoleOffset = t[i + e._xCelestialPoleOffsetRadiansColumn], a.yPoleOffset = t[i + e
            ._yCelestialPoleOffsetRadiansColumn], a.ut1MinusUtc = t[i + e._ut1MinusUtcSecondsColumn]
      }

      function p(e, t, r) {
        return t + e * (r - t)
      }

      function _(e, t, r, n, a, i, u) {
        var s = e._columnCount;
        if (i > t.length - 1) return u.xPoleWander = 0, u.yPoleWander = 0, u.xPoleOffset = 0, u.yPoleOffset = 0, u
          .ut1MinusUtc = 0, u;
        var c = t[a],
          l = t[i];
        if (c.equals(l) || n.equals(c)) return E(e, r, a, s, u), u;
        if (n.equals(l)) return E(e, r, i, s, u), u;
        var f = o.secondsDifference(n, c) / o.secondsDifference(l, c),
          d = a * s,
          h = i * s,
          m = r[d + e._ut1MinusUtcSecondsColumn],
          _ = r[h + e._ut1MinusUtcSecondsColumn],
          y = _ - m;
        if (y > .5 || y < -.5) {
          var T = r[d + e._taiMinusUtcSecondsColumn],
            R = r[h + e._taiMinusUtcSecondsColumn];
          T !== R && (l.equals(n) ? m = _ : _ -= R - T)
        }
        return u.xPoleWander = p(f, r[d + e._xPoleWanderRadiansColumn], r[h + e._xPoleWanderRadiansColumn]), u
          .yPoleWander = p(f, r[d + e._yPoleWanderRadiansColumn], r[h + e._yPoleWanderRadiansColumn]), u.xPoleOffset =
          p(f, r[d + e._xCelestialPoleOffsetRadiansColumn], r[h + e._xCelestialPoleOffsetRadiansColumn]), u
          .yPoleOffset = p(f, r[d + e._yCelestialPoleOffsetRadiansColumn], r[h + e
            ._yCelestialPoleOffsetRadiansColumn]), u.ut1MinusUtc = p(f, m, _), u
      }
      return d.NONE = i({
        getPromiseToLoad: function() {
          return e()
        },
        compute: function(e, t) {
          return n(t) ? (t.xPoleWander = 0, t.yPoleWander = 0, t.xPoleOffset = 0, t.yPoleOffset = 0, t
            .ut1MinusUtc = 0) : t = new a(0, 0, 0, 0, 0), t
        }
      }), d.prototype.getPromiseToLoad = function() {
        return e(this._downloadPromise)
      }, d.prototype.compute = function(e, r) {
        if (n(this._samples)) {
          if (n(r) || (r = new a(0, 0, 0, 0, 0)), 0 === this._samples.length) return r.xPoleWander = 0, r
            .yPoleWander = 0, r.xPoleOffset = 0, r.yPoleOffset = 0, r.ut1MinusUtc = 0, r;
          var i = this._dates,
            u = this._lastIndex,
            s = 0,
            l = 0;
          if (n(u)) {
            var f = i[u],
              d = i[u + 1],
              h = o.lessThanOrEquals(f, e),
              m = !n(d),
              E = m || o.greaterThanOrEquals(d, e);
            if (h && E) return s = u, !m && d.equals(e) && ++s, l = s + 1, _(this, i, this._samples, e, s, l, r), r
          }
          var p = t(i, e, o.compare, this._dateColumn);
          return p >= 0 ? (p < i.length - 1 && i[p + 1].equals(e) && ++p, s = p, l = p) : (l = ~p, (s = l - 1) <
            0 && (s = 0)), this._lastIndex = s, _(this, i, this._samples, e, s, l, r), r
        }
        if (n(this._dataError)) throw new c(this._dataError)
      }, d
    }), define("Core/buildModuleUrl", ["./defined", "./DeveloperError", "./Resource", "require"], function(e, t, r, n) {
      "use strict";

      function a() {
        for (var e = document.getElementsByTagName("script"), t = 0, r = e.length; t < r; ++t) {
          var n = e[t].getAttribute("src"),
            a = d.exec(n);
          if (null !== a) return a[1]
        }
      }

      function i() {
        if (e(c)) return c;
        var t;
        return t = "undefined" != typeof CESIUM_BASE_URL ? CESIUM_BASE_URL : a(), c = new r({
          url: t
        }), c.appendForwardSlash(), c
      }

      function o(e) {
        return n.toUrl("../" + e)
      }

      function u(e) {
        return i().getDerivedResource({
          url: e
        }).url
      }

      function s(t) {
        if ("undefined" == typeof document) return t;
        e(l) || (l = e(define.amd) && !define.amd.toUrlUndefined && e(n.toUrl) ? o : u), e(f) || (f = document
          .createElement("a"));
        var r = l(t);
        return f.href = r, f.href = f.href, f.href
      }
      var c, l, f, d = /((?:.*\/)|^)cesium[\w-]*\.js(?:\W|$)/i;
      return s._cesiumScriptRegex = d, s._buildModuleUrlFromBaseUrl = u, s._clearBaseResource = function() {
        c = void 0
      }, s.setBaseUrl = function(e) {
        c = r.DEFAULT.getDerivedResource({
          url: e
        })
      }, s
    }), define("Core/Iau2006XysSample", [], function() {
      "use strict";

      function e(e, t, r) {
        this.x = e, this.y = t, this.s = r
      }
      return e
    }), define("Core/Iau2006XysData", ["../ThirdParty/when", "./buildModuleUrl", "./defaultValue", "./defined",
      "./Iau2006XysSample", "./JulianDate", "./Resource", "./TimeStandard"
    ], function(e, t, r, n, a, i, o, u) {
      "use strict";

      function s(e) {
        e = r(e, r.EMPTY_OBJECT), this._xysFileUrlTemplate = o.createIfNeeded(e.xysFileUrlTemplate), this
          ._interpolationOrder = r(e.interpolationOrder, 9), this._sampleZeroJulianEphemerisDate = r(e
            .sampleZeroJulianEphemerisDate, 2442396.5), this._sampleZeroDateTT = new i(this
            ._sampleZeroJulianEphemerisDate, 0, u.TAI), this._stepSizeDays = r(e.stepSizeDays, 1), this
          ._samplesPerXysFile = r(e.samplesPerXysFile, 1e3), this._totalSamples = r(e.totalSamples, 27426), this
          ._samples = new Array(3 * this._totalSamples), this._chunkDownloadsInProgress = [];
        for (var t = this._interpolationOrder, n = this._denominators = new Array(t + 1), a = this._xTable =
            new Array(t + 1), s = Math.pow(this._stepSizeDays, t), c = 0; c <= t; ++c) {
          n[c] = s, a[c] = c * this._stepSizeDays;
          for (var l = 0; l <= t; ++l) l !== c && (n[c] *= c - l);
          n[c] = 1 / n[c]
        }
        this._work = new Array(t + 1), this._coef = new Array(t + 1)
      }

      function c(e, t, r) {
        var n = f;
        return n.dayNumber = t, n.secondsOfDay = r, i.daysDifference(n, e._sampleZeroDateTT)
      }

      function l(r, a) {
        if (r._chunkDownloadsInProgress[a]) return r._chunkDownloadsInProgress[a];
        var i = e.defer();
        r._chunkDownloadsInProgress[a] = i;
        var u, s = r._xysFileUrlTemplate;
        return u = n(s) ? s.getDerivedResource({
          templateValues: {
            0: a
          }
        }) : new o({
          url: t("Assets/IAU2006_XYS/IAU2006_XYS_" + a + ".json")
        }), e(u.fetchJson(), function(e) {
          r._chunkDownloadsInProgress[a] = !1;
          for (var t = r._samples, n = e.samples, o = a * r._samplesPerXysFile * 3, u = 0, s = n.length; u < s; ++
            u) t[o + u] = n[u];
          i.resolve()
        }), i.promise
      }
      var f = new i(0, 0, u.TAI);
      return s.prototype.preload = function(t, r, n, a) {
        var i = c(this, t, r),
          o = c(this, n, a),
          u = i / this._stepSizeDays - this._interpolationOrder / 2 | 0;
        u < 0 && (u = 0);
        var s = o / this._stepSizeDays - this._interpolationOrder / 2 | 0 + this._interpolationOrder;
        s >= this._totalSamples && (s = this._totalSamples - 1);
        for (var f = u / this._samplesPerXysFile | 0, d = s / this._samplesPerXysFile | 0, h = [], m = f; m <= d; ++
          m) h.push(l(this, m));
        return e.all(h)
      }, s.prototype.computeXysRadians = function(e, t, r) {
        var i = c(this, e, t);
        if (!(i < 0)) {
          var o = i / this._stepSizeDays | 0;
          if (!(o >= this._totalSamples)) {
            var u = this._interpolationOrder,
              s = o - (u / 2 | 0);
            s < 0 && (s = 0);
            var f = s + u;
            f >= this._totalSamples && (f = this._totalSamples - 1, (s = f - u) < 0 && (s = 0));
            var d = !1,
              h = this._samples;
            if (n(h[3 * s]) || (l(this, s / this._samplesPerXysFile | 0), d = !0), n(h[3 * f]) || (l(this, f / this
                ._samplesPerXysFile | 0), d = !0), !d) {
              n(r) ? (r.x = 0, r.y = 0, r.s = 0) : r = new a(0, 0, 0);
              var m, E, p = i - s * this._stepSizeDays,
                _ = this._work,
                y = this._denominators,
                T = this._coef,
                R = this._xTable;
              for (m = 0; m <= u; ++m) _[m] = p - R[m];
              for (m = 0; m <= u; ++m) {
                for (T[m] = 1, E = 0; E <= u; ++E) E !== m && (T[m] *= _[E]);
                T[m] *= y[m];
                var A = 3 * (s + m);
                r.x += T[m] * h[A++], r.y += T[m] * h[A++], r.s += T[m] * h[A]
              }
              return r
            }
          }
        }
      }, s
    }), define("Core/Quaternion", ["./Cartesian3", "./Check", "./defaultValue", "./defined", "./FeatureDetection",
      "./freezeObject", "./Math", "./Matrix3"
    ], function(e, t, r, n, a, i, o, u) {
      "use strict";

      function s(e, t, n, a) {
        this.x = r(e, 0), this.y = r(t, 0), this.z = r(n, 0), this.w = r(a, 0)
      }
      var c = new e;
      s.fromAxisAngle = function(t, r, a) {
        var i = r / 2,
          o = Math.sin(i);
        c = e.normalize(t, c);
        var u = c.x * o,
          l = c.y * o,
          f = c.z * o,
          d = Math.cos(i);
        return n(a) ? (a.x = u, a.y = l, a.z = f, a.w = d, a) : new s(u, l, f, d)
      };
      var l = [1, 2, 0],
        f = new Array(3);
      s.fromRotationMatrix = function(e, t) {
        var r, a, i, o, c, d = e[u.COLUMN0ROW0],
          h = e[u.COLUMN1ROW1],
          m = e[u.COLUMN2ROW2],
          E = d + h + m;
        if (E > 0) r = Math.sqrt(E + 1), c = .5 * r, r = .5 / r, a = (e[u.COLUMN1ROW2] - e[u.COLUMN2ROW1]) * r, i =
          (e[u.COLUMN2ROW0] - e[u.COLUMN0ROW2]) * r, o = (e[u.COLUMN0ROW1] - e[u.COLUMN1ROW0]) * r;
        else {
          var p = l,
            _ = 0;
          h > d && (_ = 1), m > d && m > h && (_ = 2);
          var y = p[_],
            T = p[y];
          r = Math.sqrt(e[u.getElementIndex(_, _)] - e[u.getElementIndex(y, y)] - e[u.getElementIndex(T, T)] + 1);
          var R = f;
          R[_] = .5 * r, r = .5 / r, c = (e[u.getElementIndex(T, y)] - e[u.getElementIndex(y, T)]) * r, R[y] = (e[u
            .getElementIndex(y, _)] + e[u.getElementIndex(_, y)]) * r, R[T] = (e[u.getElementIndex(T, _)] + e[u
            .getElementIndex(_, T)]) * r, a = -R[0], i = -R[1], o = -R[2]
        }
        return n(t) ? (t.x = a, t.y = i, t.z = o, t.w = c, t) : new s(a, i, o, c)
      };
      var d = new s,
        h = new s,
        m = new s,
        E = new s;
      s.fromHeadingPitchRoll = function(t, r) {
        return E = s.fromAxisAngle(e.UNIT_X, t.roll, d), m = s.fromAxisAngle(e.UNIT_Y, -t.pitch, r), r = s.multiply(
          m, E, m), h = s.fromAxisAngle(e.UNIT_Z, -t.heading, d), s.multiply(h, r, r)
      };
      var p = new e,
        _ = new e,
        y = new s,
        T = new s,
        R = new s;
      s.packedLength = 4, s.pack = function(e, t, n) {
        return n = r(n, 0), t[n++] = e.x, t[n++] = e.y, t[n++] = e.z, t[n] = e.w, t
      }, s.unpack = function(e, t, a) {
        return t = r(t, 0), n(a) || (a = new s), a.x = e[t], a.y = e[t + 1], a.z = e[t + 2], a.w = e[t + 3], a
      }, s.packedInterpolationLength = 3, s.convertPackedArrayForInterpolation = function(e, t, r, n) {
        s.unpack(e, 4 * r, R), s.conjugate(R, R);
        for (var a = 0, i = r - t + 1; a < i; a++) {
          var o = 3 * a;
          s.unpack(e, 4 * (t + a), y), s.multiply(y, R, y), y.w < 0 && s.negate(y, y), s.computeAxis(y, p);
          var u = s.computeAngle(y);
          n[o] = p.x * u, n[o + 1] = p.y * u, n[o + 2] = p.z * u
        }
      }, s.unpackInterpolationResult = function(t, r, a, i, o) {
        n(o) || (o = new s), e.fromArray(t, 0, _);
        var u = e.magnitude(_);
        return s.unpack(r, 4 * i, T), 0 === u ? s.clone(s.IDENTITY, y) : s.fromAxisAngle(_, u, y), s.multiply(y, T,
          o)
      }, s.clone = function(e, t) {
        if (n(e)) return n(t) ? (t.x = e.x, t.y = e.y, t.z = e.z, t.w = e.w, t) : new s(e.x, e.y, e.z, e.w)
      }, s.conjugate = function(e, t) {
        return t.x = -e.x, t.y = -e.y, t.z = -e.z, t.w = e.w, t
      }, s.magnitudeSquared = function(e) {
        return e.x * e.x + e.y * e.y + e.z * e.z + e.w * e.w
      }, s.magnitude = function(e) {
        return Math.sqrt(s.magnitudeSquared(e))
      }, s.normalize = function(e, t) {
        var r = 1 / s.magnitude(e),
          n = e.x * r,
          a = e.y * r,
          i = e.z * r,
          o = e.w * r;
        return t.x = n, t.y = a, t.z = i, t.w = o, t
      }, s.inverse = function(e, t) {
        var r = s.magnitudeSquared(e);
        return t = s.conjugate(e, t), s.multiplyByScalar(t, 1 / r, t)
      }, s.add = function(e, t, r) {
        return r.x = e.x + t.x, r.y = e.y + t.y, r.z = e.z + t.z, r.w = e.w + t.w, r
      }, s.subtract = function(e, t, r) {
        return r.x = e.x - t.x, r.y = e.y - t.y, r.z = e.z - t.z, r.w = e.w - t.w, r
      }, s.negate = function(e, t) {
        return t.x = -e.x, t.y = -e.y, t.z = -e.z, t.w = -e.w, t
      }, s.dot = function(e, t) {
        return e.x * t.x + e.y * t.y + e.z * t.z + e.w * t.w
      }, s.multiply = function(e, t, r) {
        var n = e.x,
          a = e.y,
          i = e.z,
          o = e.w,
          u = t.x,
          s = t.y,
          c = t.z,
          l = t.w,
          f = o * u + n * l + a * c - i * s,
          d = o * s - n * c + a * l + i * u,
          h = o * c + n * s - a * u + i * l,
          m = o * l - n * u - a * s - i * c;
        return r.x = f, r.y = d, r.z = h, r.w = m, r
      }, s.multiplyByScalar = function(e, t, r) {
        return r.x = e.x * t, r.y = e.y * t, r.z = e.z * t, r.w = e.w * t, r
      }, s.divideByScalar = function(e, t, r) {
        return r.x = e.x / t, r.y = e.y / t, r.z = e.z / t, r.w = e.w / t, r
      }, s.computeAxis = function(e, t) {
        var r = e.w;
        if (Math.abs(r - 1) < o.EPSILON6) return t.x = t.y = t.z = 0, t;
        var n = 1 / Math.sqrt(1 - r * r);
        return t.x = e.x * n, t.y = e.y * n, t.z = e.z * n, t
      }, s.computeAngle = function(e) {
        return Math.abs(e.w - 1) < o.EPSILON6 ? 0 : 2 * Math.acos(e.w)
      };
      var A = new s;
      s.lerp = function(e, t, r, n) {
        return A = s.multiplyByScalar(t, r, A), n = s.multiplyByScalar(e, 1 - r, n), s.add(A, n, n)
      };
      var S = new s,
        v = new s,
        g = new s;
      s.slerp = function(e, t, r, n) {
        var a = s.dot(e, t),
          i = t;
        if (a < 0 && (a = -a, i = S = s.negate(t, S)), 1 - a < o.EPSILON6) return s.lerp(e, i, r, n);
        var u = Math.acos(a);
        return v = s.multiplyByScalar(e, Math.sin((1 - r) * u), v), g = s.multiplyByScalar(i, Math.sin(r * u), g),
          n = s.add(v, g, n), s.multiplyByScalar(n, 1 / Math.sin(u), n)
      }, s.log = function(t, r) {
        var n = o.acosClamped(t.w),
          a = 0;
        return 0 !== n && (a = n / Math.sin(n)), e.multiplyByScalar(t, a, r)
      }, s.exp = function(t, r) {
        var n = e.magnitude(t),
          a = 0;
        return 0 !== n && (a = Math.sin(n) / n), r.x = t.x * a, r.y = t.y * a, r.z = t.z * a, r.w = Math.cos(n), r
      };
      var M = new e,
        N = new e,
        O = new s,
        I = new s;
      s.computeInnerQuadrangle = function(t, r, n, a) {
        var i = s.conjugate(r, O);
        s.multiply(i, n, I);
        var o = s.log(I, M);
        s.multiply(i, t, I);
        var u = s.log(I, N);
        return e.add(o, u, o), e.multiplyByScalar(o, .25, o), e.negate(o, o), s.exp(o, O), s.multiply(r, O, a)
      }, s.squad = function(e, t, r, n, a, i) {
        var o = s.slerp(e, t, a, O),
          u = s.slerp(r, n, a, I);
        return s.slerp(o, u, 2 * a * (1 - a), i)
      };
      for (var w = new s, C = 1.9011074535173003, x = a.supportsTypedArrays() ? new Float32Array(8) : [], P = a
          .supportsTypedArrays() ? new Float32Array(8) : [], U = a.supportsTypedArrays() ? new Float32Array(8) : [],
          D = a.supportsTypedArrays() ? new Float32Array(8) : [], L = 0; L < 7; ++L) {
        var F = L + 1,
          b = 2 * F + 1;
        x[L] = 1 / (F * b), P[L] = F / b
      }
      return x[7] = C / 136, P[7] = 8 * C / 17, s.fastSlerp = function(e, t, r, n) {
        var a, i = s.dot(e, t);
        i >= 0 ? a = 1 : (a = -1, i = -i);
        for (var o = i - 1, u = 1 - r, c = r * r, l = u * u, f = 7; f >= 0; --f) U[f] = (x[f] * c - P[f]) * o, D[
          f] = (x[f] * l - P[f]) * o;
        var d = a * r * (1 + U[0] * (1 + U[1] * (1 + U[2] * (1 + U[3] * (1 + U[4] * (1 + U[5] * (1 + U[6] * (1 + U[
            7])))))))),
          h = u * (1 + D[0] * (1 + D[1] * (1 + D[2] * (1 + D[3] * (1 + D[4] * (1 + D[5] * (1 + D[6] * (1 + D[
            7])))))))),
          m = s.multiplyByScalar(e, h, w);
        return s.multiplyByScalar(t, d, n), s.add(m, n, n)
      }, s.fastSquad = function(e, t, r, n, a, i) {
        var o = s.fastSlerp(e, t, a, O),
          u = s.fastSlerp(r, n, a, I);
        return s.fastSlerp(o, u, 2 * a * (1 - a), i)
      }, s.equals = function(e, t) {
        return e === t || n(e) && n(t) && e.x === t.x && e.y === t.y && e.z === t.z && e.w === t.w
      }, s.equalsEpsilon = function(e, t, r) {
        return e === t || n(e) && n(t) && Math.abs(e.x - t.x) <= r && Math.abs(e.y - t.y) <= r && Math.abs(e.z - t
          .z) <= r && Math.abs(e.w - t.w) <= r
      }, s.ZERO = i(new s(0, 0, 0, 0)), s.IDENTITY = i(new s(0, 0, 0, 1)), s.prototype.clone = function(e) {
        return s.clone(this, e)
      }, s.prototype.equals = function(e) {
        return s.equals(this, e)
      }, s.prototype.equalsEpsilon = function(e, t) {
        return s.equalsEpsilon(this, e, t)
      }, s.prototype.toString = function() {
        return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + ")"
      }, s
    }), define("Core/Transforms", ["../ThirdParty/when", "./Cartesian2", "./Cartesian3", "./Cartesian4",
      "./Cartographic", "./Check", "./defaultValue", "./defined", "./DeveloperError", "./EarthOrientationParameters",
      "./EarthOrientationParametersSample", "./Ellipsoid", "./Iau2006XysData", "./Iau2006XysSample", "./JulianDate",
      "./Math", "./Matrix3", "./Matrix4", "./Quaternion", "./TimeConstants"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d, h, m, E, p, _, y, T) {
      "use strict";
      var R = {},
        A = {
          up: {
            south: "east",
            north: "west",
            west: "south",
            east: "north"
          },
          down: {
            south: "west",
            north: "east",
            west: "north",
            east: "south"
          },
          south: {
            up: "west",
            down: "east",
            west: "down",
            east: "up"
          },
          north: {
            up: "east",
            down: "west",
            west: "up",
            east: "down"
          },
          west: {
            up: "north",
            down: "south",
            north: "down",
            south: "up"
          },
          east: {
            up: "south",
            down: "north",
            north: "up",
            south: "down"
          }
        },
        S = {
          north: [-1, 0, 0],
          east: [0, 1, 0],
          up: [0, 0, 1],
          south: [1, 0, 0],
          west: [0, -1, 0],
          down: [0, 0, -1]
        },
        v = {},
        g = {
          east: new r,
          north: new r,
          up: new r,
          west: new r,
          south: new r,
          down: new r
        },
        M = new r,
        N = new r,
        O = new r;
      R.localFrameToFixedFrameGenerator = function(e, t) {
          if (!A.hasOwnProperty(e) || !A[e].hasOwnProperty(t)) throw new s(
            "firstAxis and secondAxis must be east, north, up, west, south or down.");
          var n, a = A[e][t],
            i = e + t;
          return u(v[i]) ? n = v[i] : (n = function(n, i, s) {
            if (u(s) || (s = new _), E.equalsEpsilon(n.x, 0, E.EPSILON14) && E.equalsEpsilon(n.y, 0, E
              .EPSILON14)) {
              var c = E.sign(n.z);
              r.unpack(S[e], 0, M), "east" !== e && "west" !== e && r.multiplyByScalar(M, c, M), r.unpack(S[t], 0,
                  N), "east" !== t && "west" !== t && r.multiplyByScalar(N, c, N), r.unpack(S[a], 0, O),
                "east" !== a && "west" !== a && r.multiplyByScalar(O, c, O)
            } else {
              i = o(i, f.WGS84), i.geodeticSurfaceNormal(n, g.up);
              var l = g.up,
                d = g.east;
              d.x = -n.y, d.y = n.x, d.z = 0, r.normalize(d, g.east), r.cross(l, d, g.north), r.multiplyByScalar(g
                .up, -1, g.down), r.multiplyByScalar(g.east, -1, g.west), r.multiplyByScalar(g.north, -1, g
                .south), M = g[e], N = g[t], O = g[a]
            }
            return s[0] = M.x, s[1] = M.y, s[2] = M.z, s[3] = 0, s[4] = N.x, s[5] = N.y, s[6] = N.z, s[7] = 0, s[
              8] = O.x, s[9] = O.y, s[10] = O.z, s[11] = 0, s[12] = n.x, s[13] = n.y, s[14] = n.z, s[15] = 1, s
          }, v[i] = n), n
        }, R.eastNorthUpToFixedFrame = R.localFrameToFixedFrameGenerator("east", "north"), R
        .northEastDownToFixedFrame = R.localFrameToFixedFrameGenerator("north", "east"), R.northUpEastToFixedFrame = R
        .localFrameToFixedFrameGenerator("north", "up"), R.northWestUpToFixedFrame = R
        .localFrameToFixedFrameGenerator("north", "west");
      var I = new y,
        w = new r(1, 1, 1),
        C = new _;
      R.headingPitchRollToFixedFrame = function(e, t, n, a, i) {
        a = o(a, R.eastNorthUpToFixedFrame);
        var u = y.fromHeadingPitchRoll(t, I),
          s = _.fromTranslationQuaternionRotationScale(r.ZERO, u, w, C);
        return i = a(e, n, i), _.multiply(i, s, i)
      };
      var x = new _,
        P = new p;
      R.headingPitchRollQuaternion = function(e, t, r, n, a) {
        var i = R.headingPitchRollToFixedFrame(e, t, r, n, x),
          o = _.getRotation(i, P);
        return y.fromRotationMatrix(o, a)
      };
      var U = E.TWO_PI / 86400,
        D = new m;
      R.computeTemeToPseudoFixedMatrix = function(e, t) {
        D = m.addSeconds(e, -m.computeTaiMinusUtc(e), D);
        var r, n = D.dayNumber,
          a = D.secondsOfDay,
          i = n - 2451545;
        r = a >= 43200 ? (i + .5) / T.DAYS_PER_JULIAN_CENTURY : (i - .5) / T.DAYS_PER_JULIAN_CENTURY;
        var o = 24110.54841 + r * (8640184.812866 + r * (.093104 + -62e-7 * r)),
          s = o * U % E.TWO_PI,
          c = 72921158553e-15 + 1.1772758384668e-19 * (n - 2451545.5),
          l = (a + .5 * T.SECONDS_PER_DAY) % T.SECONDS_PER_DAY,
          f = s + c * l,
          d = Math.cos(f),
          h = Math.sin(f);
        return u(t) ? (t[0] = d, t[1] = -h, t[2] = 0, t[3] = h, t[4] = d, t[5] = 0, t[6] = 0, t[7] = 0, t[8] = 1,
          t) : new p(d, h, 0, -h, d, 0, 0, 0, 1)
      }, R.iau2006XysData = new d, R.earthOrientationParameters = c.NONE;
      R.preloadIcrfFixed = function(t) {
        var r = t.start.dayNumber,
          n = t.start.secondsOfDay + 32.184,
          a = t.stop.dayNumber,
          i = t.stop.secondsOfDay + 32.184,
          o = R.iau2006XysData.preload(r, n, a, i),
          u = R.earthOrientationParameters.getPromiseToLoad();
        return e.all([o, u])
      }, R.computeIcrfToFixedMatrix = function(e, t) {
        u(t) || (t = new p);
        var r = R.computeFixedToIcrfMatrix(e, t);
        if (u(r)) return p.transpose(r, t)
      };
      var L = new h(0, 0, 0),
        F = new l(0, 0, 0, 0, 0, 0),
        b = new p,
        B = new p;
      R.computeFixedToIcrfMatrix = function(e, t) {
        u(t) || (t = new p);
        var r = R.earthOrientationParameters.compute(e, F);
        if (u(r)) {
          var n = e.dayNumber,
            a = e.secondsOfDay + 32.184,
            i = R.iau2006XysData.computeXysRadians(n, a, L);
          if (u(i)) {
            var o = i.x + r.xPoleOffset,
              s = i.y + r.yPoleOffset,
              c = 1 / (1 + Math.sqrt(1 - o * o - s * s)),
              l = b;
            l[0] = 1 - c * o * o, l[3] = -c * o * s, l[6] = o, l[1] = -c * o * s, l[4] = 1 - c * s * s, l[7] = s, l[
              2] = -o, l[5] = -s, l[8] = 1 - c * (o * o + s * s);
            var f = p.fromRotationZ(-i.s, B),
              d = p.multiply(l, f, b),
              h = e.dayNumber,
              _ = e.secondsOfDay - m.computeTaiMinusUtc(e) + r.ut1MinusUtc,
              y = h - 2451545,
              A = _ / T.SECONDS_PER_DAY,
              S = .779057273264 + A + .00273781191135448 * (y + A);
            S = S % 1 * E.TWO_PI;
            var v = p.fromRotationZ(S, B),
              g = p.multiply(d, v, b),
              M = Math.cos(r.xPoleWander),
              N = Math.cos(r.yPoleWander),
              O = Math.sin(r.xPoleWander),
              I = Math.sin(r.yPoleWander),
              w = n - 2451545 + a / T.SECONDS_PER_DAY;
            w /= 36525;
            var C = -47e-6 * w * E.RADIANS_PER_DEGREE / 3600,
              x = Math.cos(C),
              P = Math.sin(C),
              U = B;
            return U[0] = M * x, U[1] = M * P, U[2] = O, U[3] = -N * P + I * O * x, U[4] = N * x + I * O * P, U[
              5] = -I * M, U[6] = -I * P - N * O * x, U[7] = I * x - N * O * P, U[8] = N * M, p.multiply(g, U, t)
          }
        }
      };
      var z = new n;
      R.pointToWindowCoordinates = function(e, t, r, n) {
        return n = R.pointToGLWindowCoordinates(e, t, r, n), n.y = 2 * t[5] - n.y, n
      }, R.pointToGLWindowCoordinates = function(e, r, a, i) {
        u(i) || (i = new t);
        var o = z;
        return _.multiplyByVector(e, n.fromElements(a.x, a.y, a.z, 1, o), o), n.multiplyByScalar(o, 1 / o.w, o), _
          .multiplyByVector(r, o, o), t.fromCartesian4(o, i)
      };
      var q = new r,
        G = new r,
        V = new r;
      R.rotationMatrixFromPositionVelocity = function(e, t, n, a) {
        var i = o(n, f.WGS84).geodeticSurfaceNormal(e, q),
          s = r.cross(t, i, G);
        r.equalsEpsilon(s, r.ZERO, E.EPSILON6) && (s = r.clone(r.UNIT_X, s));
        var c = r.cross(s, t, V);
        return r.cross(t, c, s), r.negate(s, s), u(a) || (a = new p), a[0] = t.x, a[1] = t.y, a[2] = t.z, a[3] = s
          .x, a[4] = s.y, a[5] = s.z, a[6] = c.x, a[7] = c.y, a[8] = c.z, a
      };
      var W = new _(0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1),
        X = new a,
        H = new r,
        k = new r,
        Y = new p,
        j = new _,
        Z = new _;
      return R.basisTo2D = function(e, t, n) {
        var a = _.getTranslation(t, k),
          i = e.ellipsoid,
          o = i.cartesianToCartographic(a, X),
          u = e.project(o, H);
        r.fromElements(u.z, u.x, u.y, u);
        var s = R.eastNorthUpToFixedFrame(a, i, j),
          c = _.inverseTransformation(s, Z),
          l = _.getRotation(t, Y),
          f = _.multiplyByMatrix3(c, l, n);
        return _.multiply(W, f, n), _.setTranslation(n, u, n), n
      }, R.wgs84To2DModelMatrix = function(e, t, n) {
        var a = e.ellipsoid,
          i = R.eastNorthUpToFixedFrame(t, a, j),
          o = _.inverseTransformation(i, Z),
          u = a.cartesianToCartographic(t, X),
          s = e.project(u, H);
        r.fromElements(s.z, s.x, s.y, s);
        var c = _.fromTranslation(s, j);
        return _.multiply(W, o, n), _.multiply(c, n, n), n
      }, R
    }), define("Core/EllipsoidTangentPlane", ["./AxisAlignedBoundingBox", "./Cartesian2", "./Cartesian3",
      "./Cartesian4", "./defaultValue", "./defined", "./defineProperties", "./DeveloperError", "./Ellipsoid",
      "./IntersectionTests", "./Matrix4", "./Plane", "./Ray", "./Transforms"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d, h) {
      "use strict";

      function m(e, t) {
        t = a(t, s.WGS84), e = t.scaleToGeodeticSurface(e);
        var n = h.eastNorthUpToFixedFrame(e, t);
        this._ellipsoid = t, this._origin = e, this._xAxis = r.fromCartesian4(l.getColumn(n, 0, E)), this._yAxis = r
          .fromCartesian4(l.getColumn(n, 1, E));
        var i = r.fromCartesian4(l.getColumn(n, 2, E));
        this._plane = f.fromPointNormal(e, i)
      }
      var E = new n;
      o(m.prototype, {
        ellipsoid: {
          get: function() {
            return this._ellipsoid
          }
        },
        origin: {
          get: function() {
            return this._origin
          }
        },
        plane: {
          get: function() {
            return this._plane
          }
        },
        xAxis: {
          get: function() {
            return this._xAxis
          }
        },
        yAxis: {
          get: function() {
            return this._yAxis
          }
        },
        zAxis: {
          get: function() {
            return this._plane.normal
          }
        }
      });
      var p = new e;
      m.fromPoints = function(t, r) {
        return new m(e.fromPoints(t, p).center, r)
      };
      var _ = new d,
        y = new r;
      m.prototype.projectPointOntoPlane = function(e, n) {
        var a = _;
        a.origin = e, r.normalize(e, a.direction);
        var o = c.rayPlane(a, this._plane, y);
        if (i(o) || (r.negate(a.direction, a.direction), o = c.rayPlane(a, this._plane, y)), i(o)) {
          var u = r.subtract(o, this._origin, o),
            s = r.dot(this._xAxis, u),
            l = r.dot(this._yAxis, u);
          return i(n) ? (n.x = s, n.y = l, n) : new t(s, l)
        }
      }, m.prototype.projectPointsOntoPlane = function(e, t) {
        i(t) || (t = []);
        for (var r = 0, n = e.length, a = 0; a < n; a++) {
          var o = this.projectPointOntoPlane(e[a], t[r]);
          i(o) && (t[r] = o, r++)
        }
        return t.length = r, t
      }, m.prototype.projectPointToNearestOnPlane = function(e, n) {
        i(n) || (n = new t);
        var a = _;
        a.origin = e, r.clone(this._plane.normal, a.direction);
        var o = c.rayPlane(a, this._plane, y);
        i(o) || (r.negate(a.direction, a.direction), o = c.rayPlane(a, this._plane, y));
        var u = r.subtract(o, this._origin, o),
          s = r.dot(this._xAxis, u),
          l = r.dot(this._yAxis, u);
        return n.x = s, n.y = l, n
      }, m.prototype.projectPointsToNearestOnPlane = function(e, t) {
        i(t) || (t = []);
        var r = e.length;
        t.length = r;
        for (var n = 0; n < r; n++) t[n] = this.projectPointToNearestOnPlane(e[n], t[n]);
        return t
      };
      var T = new r;
      return m.prototype.projectPointsOntoEllipsoid = function(e, t) {
        var n = e.length;
        i(t) ? t.length = n : t = new Array(n);
        for (var a = this._ellipsoid, o = this._origin, u = this._xAxis, s = this._yAxis, c = T, l = 0; l < n; ++
          l) {
          var f = e[l];
          r.multiplyByScalar(u, f.x, c), i(t[l]) || (t[l] = new r);
          var d = r.add(o, c, t[l]);
          r.multiplyByScalar(s, f.y, c), r.add(d, c, d), a.scaleToGeocentricSurface(d, d)
        }
        return t
      }, m
    }), define("Core/OrientedBoundingBox", ["./BoundingSphere", "./Cartesian2", "./Cartesian3", "./Cartographic",
      "./Check", "./defaultValue", "./defined", "./DeveloperError", "./Ellipsoid", "./EllipsoidTangentPlane",
      "./Intersect", "./Interval", "./Math", "./Matrix3", "./Plane", "./Rectangle"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d, h, m, E) {
      "use strict";

      function p(e, t) {
        this.center = r.clone(i(e, r.ZERO)), this.halfAxes = h.clone(i(t, h.ZERO))
      }

      function _(e, t, n, a, i, u, s, c) {
        o(c) || (c = new p);
        var l = c.halfAxes;
        h.setColumn(l, 0, e.xAxis, l), h.setColumn(l, 1, e.yAxis, l), h.setColumn(l, 2, e.zAxis, l);
        var f = N;
        f.x = (t + n) / 2, f.y = (a + i) / 2, f.z = (u + s) / 2;
        var d = O;
        d.x = (n - t) / 2, d.y = (i - a) / 2, d.z = (s - u) / 2;
        var m = c.center;
        return f = h.multiplyByVector(l, f, f), r.add(e.origin, f, m), h.multiplyByScale(l, d, l), c
      }
      p.packedLength = r.packedLength + h.packedLength, p.pack = function(e, t, n) {
        return n = i(n, 0), r.pack(e.center, t, n), h.pack(e.halfAxes, t, n + r.packedLength), t
      }, p.unpack = function(e, t, n) {
        return t = i(t, 0), o(n) || (n = new p), r.unpack(e, t, n.center), h.unpack(e, t + r.packedLength, n
          .halfAxes), n
      };
      var y = new r,
        T = new r,
        R = new r,
        A = new r,
        S = new r,
        v = new r,
        g = new h,
        M = {
          unitary: new h,
          diagonal: new h
        };
      p.fromPoints = function(e, t) {
        if (o(t) || (t = new p), !o(e) || 0 === e.length) return t.halfAxes = h.ZERO, t.center = r.ZERO, t;
        var n, a = e.length,
          i = r.clone(e[0], y);
        for (n = 1; n < a; n++) r.add(i, e[n], i);
        var u = 1 / a;
        r.multiplyByScalar(i, u, i);
        var s, c = 0,
          l = 0,
          f = 0,
          d = 0,
          m = 0,
          E = 0;
        for (n = 0; n < a; n++) s = r.subtract(e[n], i, T), c += s.x * s.x, l += s.x * s.y, f += s.x * s.z, d += s
          .y * s.y, m += s.y * s.z, E += s.z * s.z;
        c *= u, l *= u, f *= u, d *= u, m *= u, E *= u;
        var _ = g;
        _[0] = c, _[1] = l, _[2] = f, _[3] = l, _[4] = d, _[5] = m, _[6] = f, _[7] = m, _[8] = E;
        var N = h.computeEigenDecomposition(_, M),
          O = h.clone(N.unitary, t.halfAxes),
          I = h.getColumn(O, 0, A),
          w = h.getColumn(O, 1, S),
          C = h.getColumn(O, 2, v),
          x = -Number.MAX_VALUE,
          P = -Number.MAX_VALUE,
          U = -Number.MAX_VALUE,
          D = Number.MAX_VALUE,
          L = Number.MAX_VALUE,
          F = Number.MAX_VALUE;
        for (n = 0; n < a; n++) s = e[n], x = Math.max(r.dot(I, s), x), P = Math.max(r.dot(w, s), P), U = Math.max(r
          .dot(C, s), U), D = Math.min(r.dot(I, s), D), L = Math.min(r.dot(w, s), L), F = Math.min(r.dot(C, s), F);
        I = r.multiplyByScalar(I, .5 * (D + x), I), w = r.multiplyByScalar(w, .5 * (L + P), w), C = r
          .multiplyByScalar(C, .5 * (F + U), C);
        var b = r.add(I, w, t.center);
        r.add(b, C, b);
        var B = R;
        return B.x = x - D, B.y = P - L, B.z = U - F, r.multiplyByScalar(B, .5, B), h.multiplyByScale(t.halfAxes, B,
          t.halfAxes), t
      };
      var N = new r,
        O = new r,
        I = new n,
        w = new r,
        C = [new n, new n, new n, new n, new n, new n, new n, new n],
        x = [new r, new r, new r, new r, new r, new r, new r, new r],
        P = [new t, new t, new t, new t, new t, new t, new t, new t];
      p.fromRectangle = function(e, t, r, n, a) {
        t = i(t, 0), r = i(r, 0), n = i(n, s.WGS84);
        var o = E.center(e, I),
          u = n.cartographicToCartesian(o, w),
          l = new c(u, n),
          f = l.plane,
          d = C[0],
          h = C[1],
          p = C[2],
          y = C[3],
          T = C[4],
          R = C[5],
          A = C[6],
          S = C[7],
          v = o.longitude,
          g = e.south < 0 && e.north > 0 ? 0 : o.latitude;
        A.latitude = R.latitude = T.latitude = e.south, S.latitude = y.latitude = g, d.latitude = h.latitude = p
          .latitude = e.north, A.longitude = S.longitude = d.longitude = e.west, R.longitude = h.longitude = v, T
          .longitude = y.longitude = p.longitude = e.east, p.height = h.height = d.height = S.height = A.height = R
          .height = T.height = y.height = r, n.cartographicArrayToCartesianArray(C, x), l
          .projectPointsToNearestOnPlane(x, P);
        var M = Math.min(P[6].x, P[7].x, P[0].x),
          N = Math.max(P[2].x, P[3].x, P[4].x),
          O = Math.min(P[4].y, P[5].y, P[6].y),
          U = Math.max(P[0].y, P[1].y, P[2].y);
        return p.height = d.height = T.height = A.height = t, n.cartographicArrayToCartesianArray(C, x), _(l, M, N,
          O, U, Math.min(m.getPointDistance(f, x[0]), m.getPointDistance(f, x[2]), m.getPointDistance(f, x[4]), m
            .getPointDistance(f, x[6])), r, a)
      }, p.clone = function(e, t) {
        if (o(e)) return o(t) ? (r.clone(e.center, t.center), h.clone(e.halfAxes, t.halfAxes), t) : new p(e.center,
          e.halfAxes)
      }, p.intersectPlane = function(e, t) {
        var n = e.center,
          a = t.normal,
          i = e.halfAxes,
          o = a.x,
          u = a.y,
          s = a.z,
          c = Math.abs(o * i[h.COLUMN0ROW0] + u * i[h.COLUMN0ROW1] + s * i[h.COLUMN0ROW2]) + Math.abs(o * i[h
            .COLUMN1ROW0] + u * i[h.COLUMN1ROW1] + s * i[h.COLUMN1ROW2]) + Math.abs(o * i[h.COLUMN2ROW0] + u * i[h
            .COLUMN2ROW1] + s * i[h.COLUMN2ROW2]),
          f = r.dot(a, n) + t.distance;
        return f <= -c ? l.OUTSIDE : f >= c ? l.INSIDE : l.INTERSECTING
      };
      var U = new r,
        D = new r,
        L = new r,
        F = new r;
      p.distanceSquaredTo = function(e, t) {
        var n = r.subtract(t, e.center, N),
          a = e.halfAxes,
          i = h.getColumn(a, 0, U),
          o = h.getColumn(a, 1, D),
          u = h.getColumn(a, 2, L),
          s = r.magnitude(i),
          c = r.magnitude(o),
          l = r.magnitude(u);
        r.normalize(i, i), r.normalize(o, o), r.normalize(u, u);
        var f = F;
        f.x = r.dot(n, i), f.y = r.dot(n, o), f.z = r.dot(n, u);
        var d, m = 0;
        return f.x < -s ? (d = f.x + s, m += d * d) : f.x > s && (d = f.x - s, m += d * d), f.y < -c ? (d = f.y + c,
          m += d * d) : f.y > c && (d = f.y - c, m += d * d), f.z < -l ? (d = f.z + l, m += d * d) : f.z > l && (
          d = f.z - l, m += d * d), m
      };
      var b = new r,
        B = new r;
      p.computePlaneDistances = function(e, t, n, a) {
        o(a) || (a = new f);
        var i = Number.POSITIVE_INFINITY,
          u = Number.NEGATIVE_INFINITY,
          s = e.center,
          c = e.halfAxes,
          l = h.getColumn(c, 0, U),
          d = h.getColumn(c, 1, D),
          m = h.getColumn(c, 2, L),
          E = r.add(l, d, b);
        r.add(E, m, E), r.add(E, s, E);
        var p = r.subtract(E, t, B),
          _ = r.dot(n, p);
        return i = Math.min(_, i), u = Math.max(_, u), r.add(s, l, E), r.add(E, d, E), r.subtract(E, m, E), r
          .subtract(E, t, p), _ = r.dot(n, p), i = Math.min(_, i), u = Math.max(_, u), r.add(s, l, E), r.subtract(E,
            d, E), r.add(E, m, E), r.subtract(E, t, p), _ = r.dot(n, p), i = Math.min(_, i), u = Math.max(_, u), r
          .add(s, l, E), r.subtract(E, d, E), r.subtract(E, m, E), r.subtract(E, t, p), _ = r.dot(n, p), i = Math
          .min(_, i), u = Math.max(_, u), r.subtract(s, l, E), r.add(E, d, E), r.add(E, m, E), r.subtract(E, t, p),
          _ = r.dot(n, p), i = Math.min(_, i), u = Math.max(_, u), r.subtract(s, l, E), r.add(E, d, E), r.subtract(
            E, m, E), r.subtract(E, t, p), _ = r.dot(n, p), i = Math.min(_, i), u = Math.max(_, u), r.subtract(s, l,
            E), r.subtract(E, d, E), r.add(E, m, E), r.subtract(E, t, p), _ = r.dot(n, p), i = Math.min(_, i), u =
          Math.max(_, u), r.subtract(s, l, E), r.subtract(E, d, E), r.subtract(E, m, E), r.subtract(E, t, p), _ = r
          .dot(n, p), i = Math.min(_, i), u = Math.max(_, u), a.start = i, a.stop = u, a
      };
      var z = new e;
      return p.isOccluded = function(t, r) {
        var n = e.fromOrientedBoundingBox(t, z);
        return !r.isBoundingSphereVisible(n)
      }, p.prototype.intersectPlane = function(e) {
        return p.intersectPlane(this, e)
      }, p.prototype.distanceSquaredTo = function(e) {
        return p.distanceSquaredTo(this, e)
      }, p.prototype.computePlaneDistances = function(e, t, r) {
        return p.computePlaneDistances(this, e, t, r)
      }, p.prototype.isOccluded = function(e) {
        return p.isOccluded(this, e)
      }, p.equals = function(e, t) {
        return e === t || o(e) && o(t) && r.equals(e.center, t.center) && h.equals(e.halfAxes, t.halfAxes)
      }, p.prototype.clone = function(e) {
        return p.clone(this, e)
      }, p.prototype.equals = function(e) {
        return p.equals(this, e)
      }, p
    }),
    define("Core/AttributeCompression", ["./Cartesian2", "./Cartesian3", "./Check", "./defined", "./DeveloperError",
      "./Math"
    ], function(e, t, r, n, a, i) {
      "use strict";

      function o(e) {
        return l[0] = e, l[0]
      }

      function u(e) {
        return e >> 1 ^ -(1 & e)
      }
      var s = {};
      s.octEncodeInRange = function(e, t, r) {
        if (r.x = e.x / (Math.abs(e.x) + Math.abs(e.y) + Math.abs(e.z)), r.y = e.y / (Math.abs(e.x) + Math.abs(e
            .y) + Math.abs(e.z)), e.z < 0) {
          var n = r.x,
            a = r.y;
          r.x = (1 - Math.abs(a)) * i.signNotZero(n), r.y = (1 - Math.abs(n)) * i.signNotZero(a)
        }
        return r.x = i.toSNorm(r.x, t), r.y = i.toSNorm(r.y, t), r
      }, s.octEncode = function(e, t) {
        return s.octEncodeInRange(e, 255, t)
      };
      var c = new e,
        l = new Uint8Array(1);
      s.octEncodeToCartesian4 = function(e, t) {
        return s.octEncodeInRange(e, 65535, c), t.x = o(c.x * (1 / 256)), t.y = o(c.x), t.z = o(c.y * (1 / 256)), t
          .w = o(c.y), t
      }, s.octDecodeInRange = function(e, r, n, a) {
        if (a.x = i.fromSNorm(e, n), a.y = i.fromSNorm(r, n), a.z = 1 - (Math.abs(a.x) + Math.abs(a.y)), a.z < 0) {
          var o = a.x;
          a.x = (1 - Math.abs(a.y)) * i.signNotZero(o), a.y = (1 - Math.abs(o)) * i.signNotZero(a.y)
        }
        return t.normalize(a, a)
      }, s.octDecode = function(e, t, r) {
        return s.octDecodeInRange(e, t, 255, r)
      }, s.octDecodeFromCartesian4 = function(e, t) {
        var r = e.x,
          n = e.y,
          a = e.z,
          i = e.w,
          o = 256 * r + n,
          u = 256 * a + i;
        return s.octDecodeInRange(o, u, 65535, t)
      }, s.octPackFloat = function(e) {
        return 256 * e.x + e.y
      };
      var f = new e;
      return s.octEncodeFloat = function(e) {
        return s.octEncode(e, f), s.octPackFloat(f)
      }, s.octDecodeFloat = function(e, t) {
        var r = e / 256,
          n = Math.floor(r),
          a = 256 * (r - n);
        return s.octDecode(n, a, t)
      }, s.octPack = function(e, t, r, n) {
        var a = s.octEncodeFloat(e),
          i = s.octEncodeFloat(t),
          o = s.octEncode(r, f);
        return n.x = 65536 * o.x + a, n.y = 65536 * o.y + i, n
      }, s.octUnpack = function(e, t, r, n) {
        var a = e.x / 65536,
          i = Math.floor(a),
          o = 65536 * (a - i);
        a = e.y / 65536;
        var u = Math.floor(a),
          c = 65536 * (a - u);
        s.octDecodeFloat(o, t), s.octDecodeFloat(c, r), s.octDecode(i, u, n)
      }, s.compressTextureCoordinates = function(e) {
        return 4096 * (4095 * e.x | 0) + (4095 * e.y | 0)
      }, s.decompressTextureCoordinates = function(e, t) {
        var r = e / 4096,
          n = Math.floor(r);
        return t.x = n / 4095, t.y = (e - 4096 * n) / 4095, t
      }, s.zigZagDeltaDecode = function(e, t, r) {
        for (var a = e.length, i = 0, o = 0, s = 0, c = 0; c < a; ++c) i += u(e[c]), o += u(t[c]), e[c] = i, t[c] =
          o, n(r) && (s += u(r[c]), r[c] = s)
      }, s
    }), define("Core/WebGLConstants", ["./freezeObject"], function(e) {
      "use strict";
      return e({
        DEPTH_BUFFER_BIT: 256,
        STENCIL_BUFFER_BIT: 1024,
        COLOR_BUFFER_BIT: 16384,
        POINTS: 0,
        LINES: 1,
        LINE_LOOP: 2,
        LINE_STRIP: 3,
        TRIANGLES: 4,
        TRIANGLE_STRIP: 5,
        TRIANGLE_FAN: 6,
        ZERO: 0,
        ONE: 1,
        SRC_COLOR: 768,
        ONE_MINUS_SRC_COLOR: 769,
        SRC_ALPHA: 770,
        ONE_MINUS_SRC_ALPHA: 771,
        DST_ALPHA: 772,
        ONE_MINUS_DST_ALPHA: 773,
        DST_COLOR: 774,
        ONE_MINUS_DST_COLOR: 775,
        SRC_ALPHA_SATURATE: 776,
        FUNC_ADD: 32774,
        BLEND_EQUATION: 32777,
        BLEND_EQUATION_RGB: 32777,
        BLEND_EQUATION_ALPHA: 34877,
        FUNC_SUBTRACT: 32778,
        FUNC_REVERSE_SUBTRACT: 32779,
        BLEND_DST_RGB: 32968,
        BLEND_SRC_RGB: 32969,
        BLEND_DST_ALPHA: 32970,
        BLEND_SRC_ALPHA: 32971,
        CONSTANT_COLOR: 32769,
        ONE_MINUS_CONSTANT_COLOR: 32770,
        CONSTANT_ALPHA: 32771,
        ONE_MINUS_CONSTANT_ALPHA: 32772,
        BLEND_COLOR: 32773,
        ARRAY_BUFFER: 34962,
        ELEMENT_ARRAY_BUFFER: 34963,
        ARRAY_BUFFER_BINDING: 34964,
        ELEMENT_ARRAY_BUFFER_BINDING: 34965,
        STREAM_DRAW: 35040,
        STATIC_DRAW: 35044,
        DYNAMIC_DRAW: 35048,
        BUFFER_SIZE: 34660,
        BUFFER_USAGE: 34661,
        CURRENT_VERTEX_ATTRIB: 34342,
        FRONT: 1028,
        BACK: 1029,
        FRONT_AND_BACK: 1032,
        CULL_FACE: 2884,
        BLEND: 3042,
        DITHER: 3024,
        STENCIL_TEST: 2960,
        DEPTH_TEST: 2929,
        SCISSOR_TEST: 3089,
        POLYGON_OFFSET_FILL: 32823,
        SAMPLE_ALPHA_TO_COVERAGE: 32926,
        SAMPLE_COVERAGE: 32928,
        NO_ERROR: 0,
        INVALID_ENUM: 1280,
        INVALID_VALUE: 1281,
        INVALID_OPERATION: 1282,
        OUT_OF_MEMORY: 1285,
        CW: 2304,
        CCW: 2305,
        LINE_WIDTH: 2849,
        ALIASED_POINT_SIZE_RANGE: 33901,
        ALIASED_LINE_WIDTH_RANGE: 33902,
        CULL_FACE_MODE: 2885,
        FRONT_FACE: 2886,
        DEPTH_RANGE: 2928,
        DEPTH_WRITEMASK: 2930,
        DEPTH_CLEAR_VALUE: 2931,
        DEPTH_FUNC: 2932,
        STENCIL_CLEAR_VALUE: 2961,
        STENCIL_FUNC: 2962,
        STENCIL_FAIL: 2964,
        STENCIL_PASS_DEPTH_FAIL: 2965,
        STENCIL_PASS_DEPTH_PASS: 2966,
        STENCIL_REF: 2967,
        STENCIL_VALUE_MASK: 2963,
        STENCIL_WRITEMASK: 2968,
        STENCIL_BACK_FUNC: 34816,
        STENCIL_BACK_FAIL: 34817,
        STENCIL_BACK_PASS_DEPTH_FAIL: 34818,
        STENCIL_BACK_PASS_DEPTH_PASS: 34819,
        STENCIL_BACK_REF: 36003,
        STENCIL_BACK_VALUE_MASK: 36004,
        STENCIL_BACK_WRITEMASK: 36005,
        VIEWPORT: 2978,
        SCISSOR_BOX: 3088,
        COLOR_CLEAR_VALUE: 3106,
        COLOR_WRITEMASK: 3107,
        UNPACK_ALIGNMENT: 3317,
        PACK_ALIGNMENT: 3333,
        MAX_TEXTURE_SIZE: 3379,
        MAX_VIEWPORT_DIMS: 3386,
        SUBPIXEL_BITS: 3408,
        RED_BITS: 3410,
        GREEN_BITS: 3411,
        BLUE_BITS: 3412,
        ALPHA_BITS: 3413,
        DEPTH_BITS: 3414,
        STENCIL_BITS: 3415,
        POLYGON_OFFSET_UNITS: 10752,
        POLYGON_OFFSET_FACTOR: 32824,
        TEXTURE_BINDING_2D: 32873,
        SAMPLE_BUFFERS: 32936,
        SAMPLES: 32937,
        SAMPLE_COVERAGE_VALUE: 32938,
        SAMPLE_COVERAGE_INVERT: 32939,
        COMPRESSED_TEXTURE_FORMATS: 34467,
        DONT_CARE: 4352,
        FASTEST: 4353,
        NICEST: 4354,
        GENERATE_MIPMAP_HINT: 33170,
        BYTE: 5120,
        UNSIGNED_BYTE: 5121,
        SHORT: 5122,
        UNSIGNED_SHORT: 5123,
        INT: 5124,
        UNSIGNED_INT: 5125,
        FLOAT: 5126,
        DEPTH_COMPONENT: 6402,
        ALPHA: 6406,
        RGB: 6407,
        RGBA: 6408,
        LUMINANCE: 6409,
        LUMINANCE_ALPHA: 6410,
        UNSIGNED_SHORT_4_4_4_4: 32819,
        UNSIGNED_SHORT_5_5_5_1: 32820,
        UNSIGNED_SHORT_5_6_5: 33635,
        FRAGMENT_SHADER: 35632,
        VERTEX_SHADER: 35633,
        MAX_VERTEX_ATTRIBS: 34921,
        MAX_VERTEX_UNIFORM_VECTORS: 36347,
        MAX_VARYING_VECTORS: 36348,
        MAX_COMBINED_TEXTURE_IMAGE_UNITS: 35661,
        MAX_VERTEX_TEXTURE_IMAGE_UNITS: 35660,
        MAX_TEXTURE_IMAGE_UNITS: 34930,
        MAX_FRAGMENT_UNIFORM_VECTORS: 36349,
        SHADER_TYPE: 35663,
        DELETE_STATUS: 35712,
        LINK_STATUS: 35714,
        VALIDATE_STATUS: 35715,
        ATTACHED_SHADERS: 35717,
        ACTIVE_UNIFORMS: 35718,
        ACTIVE_ATTRIBUTES: 35721,
        SHADING_LANGUAGE_VERSION: 35724,
        CURRENT_PROGRAM: 35725,
        NEVER: 512,
        LESS: 513,
        EQUAL: 514,
        LEQUAL: 515,
        GREATER: 516,
        NOTEQUAL: 517,
        GEQUAL: 518,
        ALWAYS: 519,
        KEEP: 7680,
        REPLACE: 7681,
        INCR: 7682,
        DECR: 7683,
        INVERT: 5386,
        INCR_WRAP: 34055,
        DECR_WRAP: 34056,
        VENDOR: 7936,
        RENDERER: 7937,
        VERSION: 7938,
        NEAREST: 9728,
        LINEAR: 9729,
        NEAREST_MIPMAP_NEAREST: 9984,
        LINEAR_MIPMAP_NEAREST: 9985,
        NEAREST_MIPMAP_LINEAR: 9986,
        LINEAR_MIPMAP_LINEAR: 9987,
        TEXTURE_MAG_FILTER: 10240,
        TEXTURE_MIN_FILTER: 10241,
        TEXTURE_WRAP_S: 10242,
        TEXTURE_WRAP_T: 10243,
        TEXTURE_2D: 3553,
        TEXTURE: 5890,
        TEXTURE_CUBE_MAP: 34067,
        TEXTURE_BINDING_CUBE_MAP: 34068,
        TEXTURE_CUBE_MAP_POSITIVE_X: 34069,
        TEXTURE_CUBE_MAP_NEGATIVE_X: 34070,
        TEXTURE_CUBE_MAP_POSITIVE_Y: 34071,
        TEXTURE_CUBE_MAP_NEGATIVE_Y: 34072,
        TEXTURE_CUBE_MAP_POSITIVE_Z: 34073,
        TEXTURE_CUBE_MAP_NEGATIVE_Z: 34074,
        MAX_CUBE_MAP_TEXTURE_SIZE: 34076,
        TEXTURE0: 33984,
        TEXTURE1: 33985,
        TEXTURE2: 33986,
        TEXTURE3: 33987,
        TEXTURE4: 33988,
        TEXTURE5: 33989,
        TEXTURE6: 33990,
        TEXTURE7: 33991,
        TEXTURE8: 33992,
        TEXTURE9: 33993,
        TEXTURE10: 33994,
        TEXTURE11: 33995,
        TEXTURE12: 33996,
        TEXTURE13: 33997,
        TEXTURE14: 33998,
        TEXTURE15: 33999,
        TEXTURE16: 34e3,
        TEXTURE17: 34001,
        TEXTURE18: 34002,
        TEXTURE19: 34003,
        TEXTURE20: 34004,
        TEXTURE21: 34005,
        TEXTURE22: 34006,
        TEXTURE23: 34007,
        TEXTURE24: 34008,
        TEXTURE25: 34009,
        TEXTURE26: 34010,
        TEXTURE27: 34011,
        TEXTURE28: 34012,
        TEXTURE29: 34013,
        TEXTURE30: 34014,
        TEXTURE31: 34015,
        ACTIVE_TEXTURE: 34016,
        REPEAT: 10497,
        CLAMP_TO_EDGE: 33071,
        MIRRORED_REPEAT: 33648,
        FLOAT_VEC2: 35664,
        FLOAT_VEC3: 35665,
        FLOAT_VEC4: 35666,
        INT_VEC2: 35667,
        INT_VEC3: 35668,
        INT_VEC4: 35669,
        BOOL: 35670,
        BOOL_VEC2: 35671,
        BOOL_VEC3: 35672,
        BOOL_VEC4: 35673,
        FLOAT_MAT2: 35674,
        FLOAT_MAT3: 35675,
        FLOAT_MAT4: 35676,
        SAMPLER_2D: 35678,
        SAMPLER_CUBE: 35680,
        VERTEX_ATTRIB_ARRAY_ENABLED: 34338,
        VERTEX_ATTRIB_ARRAY_SIZE: 34339,
        VERTEX_ATTRIB_ARRAY_STRIDE: 34340,
        VERTEX_ATTRIB_ARRAY_TYPE: 34341,
        VERTEX_ATTRIB_ARRAY_NORMALIZED: 34922,
        VERTEX_ATTRIB_ARRAY_POINTER: 34373,
        VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 34975,
        IMPLEMENTATION_COLOR_READ_TYPE: 35738,
        IMPLEMENTATION_COLOR_READ_FORMAT: 35739,
        COMPILE_STATUS: 35713,
        LOW_FLOAT: 36336,
        MEDIUM_FLOAT: 36337,
        HIGH_FLOAT: 36338,
        LOW_INT: 36339,
        MEDIUM_INT: 36340,
        HIGH_INT: 36341,
        FRAMEBUFFER: 36160,
        RENDERBUFFER: 36161,
        RGBA4: 32854,
        RGB5_A1: 32855,
        RGB565: 36194,
        DEPTH_COMPONENT16: 33189,
        STENCIL_INDEX: 6401,
        STENCIL_INDEX8: 36168,
        DEPTH_STENCIL: 34041,
        RENDERBUFFER_WIDTH: 36162,
        RENDERBUFFER_HEIGHT: 36163,
        RENDERBUFFER_INTERNAL_FORMAT: 36164,
        RENDERBUFFER_RED_SIZE: 36176,
        RENDERBUFFER_GREEN_SIZE: 36177,
        RENDERBUFFER_BLUE_SIZE: 36178,
        RENDERBUFFER_ALPHA_SIZE: 36179,
        RENDERBUFFER_DEPTH_SIZE: 36180,
        RENDERBUFFER_STENCIL_SIZE: 36181,
        FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 36048,
        FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 36049,
        FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 36050,
        FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 36051,
        COLOR_ATTACHMENT0: 36064,
        DEPTH_ATTACHMENT: 36096,
        STENCIL_ATTACHMENT: 36128,
        DEPTH_STENCIL_ATTACHMENT: 33306,
        NONE: 0,
        FRAMEBUFFER_COMPLETE: 36053,
        FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 36054,
        FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 36055,
        FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 36057,
        FRAMEBUFFER_UNSUPPORTED: 36061,
        FRAMEBUFFER_BINDING: 36006,
        RENDERBUFFER_BINDING: 36007,
        MAX_RENDERBUFFER_SIZE: 34024,
        INVALID_FRAMEBUFFER_OPERATION: 1286,
        UNPACK_FLIP_Y_WEBGL: 37440,
        UNPACK_PREMULTIPLY_ALPHA_WEBGL: 37441,
        CONTEXT_LOST_WEBGL: 37442,
        UNPACK_COLORSPACE_CONVERSION_WEBGL: 37443,
        BROWSER_DEFAULT_WEBGL: 37444,
        COMPRESSED_RGB_S3TC_DXT1_EXT: 33776,
        COMPRESSED_RGBA_S3TC_DXT1_EXT: 33777,
        COMPRESSED_RGBA_S3TC_DXT3_EXT: 33778,
        COMPRESSED_RGBA_S3TC_DXT5_EXT: 33779,
        COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 35840,
        COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 35841,
        COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 35842,
        COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 35843,
        COMPRESSED_RGB_ETC1_WEBGL: 36196,
        HALF_FLOAT_OES: 36193,
        DOUBLE: 5130,
        READ_BUFFER: 3074,
        UNPACK_ROW_LENGTH: 3314,
        UNPACK_SKIP_ROWS: 3315,
        UNPACK_SKIP_PIXELS: 3316,
        PACK_ROW_LENGTH: 3330,
        PACK_SKIP_ROWS: 3331,
        PACK_SKIP_PIXELS: 3332,
        COLOR: 6144,
        DEPTH: 6145,
        STENCIL: 6146,
        RED: 6403,
        RGB8: 32849,
        RGBA8: 32856,
        RGB10_A2: 32857,
        TEXTURE_BINDING_3D: 32874,
        UNPACK_SKIP_IMAGES: 32877,
        UNPACK_IMAGE_HEIGHT: 32878,
        TEXTURE_3D: 32879,
        TEXTURE_WRAP_R: 32882,
        MAX_3D_TEXTURE_SIZE: 32883,
        UNSIGNED_INT_2_10_10_10_REV: 33640,
        MAX_ELEMENTS_VERTICES: 33e3,
        MAX_ELEMENTS_INDICES: 33001,
        TEXTURE_MIN_LOD: 33082,
        TEXTURE_MAX_LOD: 33083,
        TEXTURE_BASE_LEVEL: 33084,
        TEXTURE_MAX_LEVEL: 33085,
        MIN: 32775,
        MAX: 32776,
        DEPTH_COMPONENT24: 33190,
        MAX_TEXTURE_LOD_BIAS: 34045,
        TEXTURE_COMPARE_MODE: 34892,
        TEXTURE_COMPARE_FUNC: 34893,
        CURRENT_QUERY: 34917,
        QUERY_RESULT: 34918,
        QUERY_RESULT_AVAILABLE: 34919,
        STREAM_READ: 35041,
        STREAM_COPY: 35042,
        STATIC_READ: 35045,
        STATIC_COPY: 35046,
        DYNAMIC_READ: 35049,
        DYNAMIC_COPY: 35050,
        MAX_DRAW_BUFFERS: 34852,
        DRAW_BUFFER0: 34853,
        DRAW_BUFFER1: 34854,
        DRAW_BUFFER2: 34855,
        DRAW_BUFFER3: 34856,
        DRAW_BUFFER4: 34857,
        DRAW_BUFFER5: 34858,
        DRAW_BUFFER6: 34859,
        DRAW_BUFFER7: 34860,
        DRAW_BUFFER8: 34861,
        DRAW_BUFFER9: 34862,
        DRAW_BUFFER10: 34863,
        DRAW_BUFFER11: 34864,
        DRAW_BUFFER12: 34865,
        DRAW_BUFFER13: 34866,
        DRAW_BUFFER14: 34867,
        DRAW_BUFFER15: 34868,
        MAX_FRAGMENT_UNIFORM_COMPONENTS: 35657,
        MAX_VERTEX_UNIFORM_COMPONENTS: 35658,
        SAMPLER_3D: 35679,
        SAMPLER_2D_SHADOW: 35682,
        FRAGMENT_SHADER_DERIVATIVE_HINT: 35723,
        PIXEL_PACK_BUFFER: 35051,
        PIXEL_UNPACK_BUFFER: 35052,
        PIXEL_PACK_BUFFER_BINDING: 35053,
        PIXEL_UNPACK_BUFFER_BINDING: 35055,
        FLOAT_MAT2x3: 35685,
        FLOAT_MAT2x4: 35686,
        FLOAT_MAT3x2: 35687,
        FLOAT_MAT3x4: 35688,
        FLOAT_MAT4x2: 35689,
        FLOAT_MAT4x3: 35690,
        SRGB: 35904,
        SRGB8: 35905,
        SRGB8_ALPHA8: 35907,
        COMPARE_REF_TO_TEXTURE: 34894,
        RGBA32F: 34836,
        RGB32F: 34837,
        RGBA16F: 34842,
        RGB16F: 34843,
        VERTEX_ATTRIB_ARRAY_INTEGER: 35069,
        MAX_ARRAY_TEXTURE_LAYERS: 35071,
        MIN_PROGRAM_TEXEL_OFFSET: 35076,
        MAX_PROGRAM_TEXEL_OFFSET: 35077,
        MAX_VARYING_COMPONENTS: 35659,
        TEXTURE_2D_ARRAY: 35866,
        TEXTURE_BINDING_2D_ARRAY: 35869,
        R11F_G11F_B10F: 35898,
        UNSIGNED_INT_10F_11F_11F_REV: 35899,
        RGB9_E5: 35901,
        UNSIGNED_INT_5_9_9_9_REV: 35902,
        TRANSFORM_FEEDBACK_BUFFER_MODE: 35967,
        MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 35968,
        TRANSFORM_FEEDBACK_VARYINGS: 35971,
        TRANSFORM_FEEDBACK_BUFFER_START: 35972,
        TRANSFORM_FEEDBACK_BUFFER_SIZE: 35973,
        TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 35976,
        RASTERIZER_DISCARD: 35977,
        MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 35978,
        MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 35979,
        INTERLEAVED_ATTRIBS: 35980,
        SEPARATE_ATTRIBS: 35981,
        TRANSFORM_FEEDBACK_BUFFER: 35982,
        TRANSFORM_FEEDBACK_BUFFER_BINDING: 35983,
        RGBA32UI: 36208,
        RGB32UI: 36209,
        RGBA16UI: 36214,
        RGB16UI: 36215,
        RGBA8UI: 36220,
        RGB8UI: 36221,
        RGBA32I: 36226,
        RGB32I: 36227,
        RGBA16I: 36232,
        RGB16I: 36233,
        RGBA8I: 36238,
        RGB8I: 36239,
        RED_INTEGER: 36244,
        RGB_INTEGER: 36248,
        RGBA_INTEGER: 36249,
        SAMPLER_2D_ARRAY: 36289,
        SAMPLER_2D_ARRAY_SHADOW: 36292,
        SAMPLER_CUBE_SHADOW: 36293,
        UNSIGNED_INT_VEC2: 36294,
        UNSIGNED_INT_VEC3: 36295,
        UNSIGNED_INT_VEC4: 36296,
        INT_SAMPLER_2D: 36298,
        INT_SAMPLER_3D: 36299,
        INT_SAMPLER_CUBE: 36300,
        INT_SAMPLER_2D_ARRAY: 36303,
        UNSIGNED_INT_SAMPLER_2D: 36306,
        UNSIGNED_INT_SAMPLER_3D: 36307,
        UNSIGNED_INT_SAMPLER_CUBE: 36308,
        UNSIGNED_INT_SAMPLER_2D_ARRAY: 36311,
        DEPTH_COMPONENT32F: 36012,
        DEPTH32F_STENCIL8: 36013,
        FLOAT_32_UNSIGNED_INT_24_8_REV: 36269,
        FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 33296,
        FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 33297,
        FRAMEBUFFER_ATTACHMENT_RED_SIZE: 33298,
        FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 33299,
        FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 33300,
        FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 33301,
        FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 33302,
        FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 33303,
        FRAMEBUFFER_DEFAULT: 33304,
        UNSIGNED_INT_24_8: 34042,
        DEPTH24_STENCIL8: 35056,
        UNSIGNED_NORMALIZED: 35863,
        DRAW_FRAMEBUFFER_BINDING: 36006,
        READ_FRAMEBUFFER: 36008,
        DRAW_FRAMEBUFFER: 36009,
        READ_FRAMEBUFFER_BINDING: 36010,
        RENDERBUFFER_SAMPLES: 36011,
        FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 36052,
        MAX_COLOR_ATTACHMENTS: 36063,
        COLOR_ATTACHMENT1: 36065,
        COLOR_ATTACHMENT2: 36066,
        COLOR_ATTACHMENT3: 36067,
        COLOR_ATTACHMENT4: 36068,
        COLOR_ATTACHMENT5: 36069,
        COLOR_ATTACHMENT6: 36070,
        COLOR_ATTACHMENT7: 36071,
        COLOR_ATTACHMENT8: 36072,
        COLOR_ATTACHMENT9: 36073,
        COLOR_ATTACHMENT10: 36074,
        COLOR_ATTACHMENT11: 36075,
        COLOR_ATTACHMENT12: 36076,
        COLOR_ATTACHMENT13: 36077,
        COLOR_ATTACHMENT14: 36078,
        COLOR_ATTACHMENT15: 36079,
        FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 36182,
        MAX_SAMPLES: 36183,
        HALF_FLOAT: 5131,
        RG: 33319,
        RG_INTEGER: 33320,
        R8: 33321,
        RG8: 33323,
        R16F: 33325,
        R32F: 33326,
        RG16F: 33327,
        RG32F: 33328,
        R8I: 33329,
        R8UI: 33330,
        R16I: 33331,
        R16UI: 33332,
        R32I: 33333,
        R32UI: 33334,
        RG8I: 33335,
        RG8UI: 33336,
        RG16I: 33337,
        RG16UI: 33338,
        RG32I: 33339,
        RG32UI: 33340,
        VERTEX_ARRAY_BINDING: 34229,
        R8_SNORM: 36756,
        RG8_SNORM: 36757,
        RGB8_SNORM: 36758,
        RGBA8_SNORM: 36759,
        SIGNED_NORMALIZED: 36764,
        COPY_READ_BUFFER: 36662,
        COPY_WRITE_BUFFER: 36663,
        COPY_READ_BUFFER_BINDING: 36662,
        COPY_WRITE_BUFFER_BINDING: 36663,
        UNIFORM_BUFFER: 35345,
        UNIFORM_BUFFER_BINDING: 35368,
        UNIFORM_BUFFER_START: 35369,
        UNIFORM_BUFFER_SIZE: 35370,
        MAX_VERTEX_UNIFORM_BLOCKS: 35371,
        MAX_FRAGMENT_UNIFORM_BLOCKS: 35373,
        MAX_COMBINED_UNIFORM_BLOCKS: 35374,
        MAX_UNIFORM_BUFFER_BINDINGS: 35375,
        MAX_UNIFORM_BLOCK_SIZE: 35376,
        MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 35377,
        MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 35379,
        UNIFORM_BUFFER_OFFSET_ALIGNMENT: 35380,
        ACTIVE_UNIFORM_BLOCKS: 35382,
        UNIFORM_TYPE: 35383,
        UNIFORM_SIZE: 35384,
        UNIFORM_BLOCK_INDEX: 35386,
        UNIFORM_OFFSET: 35387,
        UNIFORM_ARRAY_STRIDE: 35388,
        UNIFORM_MATRIX_STRIDE: 35389,
        UNIFORM_IS_ROW_MAJOR: 35390,
        UNIFORM_BLOCK_BINDING: 35391,
        UNIFORM_BLOCK_DATA_SIZE: 35392,
        UNIFORM_BLOCK_ACTIVE_UNIFORMS: 35394,
        UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 35395,
        UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 35396,
        UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 35398,
        INVALID_INDEX: 4294967295,
        MAX_VERTEX_OUTPUT_COMPONENTS: 37154,
        MAX_FRAGMENT_INPUT_COMPONENTS: 37157,
        MAX_SERVER_WAIT_TIMEOUT: 37137,
        OBJECT_TYPE: 37138,
        SYNC_CONDITION: 37139,
        SYNC_STATUS: 37140,
        SYNC_FLAGS: 37141,
        SYNC_FENCE: 37142,
        SYNC_GPU_COMMANDS_COMPLETE: 37143,
        UNSIGNALED: 37144,
        SIGNALED: 37145,
        ALREADY_SIGNALED: 37146,
        TIMEOUT_EXPIRED: 37147,
        CONDITION_SATISFIED: 37148,
        WAIT_FAILED: 37149,
        SYNC_FLUSH_COMMANDS_BIT: 1,
        VERTEX_ATTRIB_ARRAY_DIVISOR: 35070,
        ANY_SAMPLES_PASSED: 35887,
        ANY_SAMPLES_PASSED_CONSERVATIVE: 36202,
        SAMPLER_BINDING: 35097,
        RGB10_A2UI: 36975,
        INT_2_10_10_10_REV: 36255,
        TRANSFORM_FEEDBACK: 36386,
        TRANSFORM_FEEDBACK_PAUSED: 36387,
        TRANSFORM_FEEDBACK_ACTIVE: 36388,
        TRANSFORM_FEEDBACK_BINDING: 36389,
        COMPRESSED_R11_EAC: 37488,
        COMPRESSED_SIGNED_R11_EAC: 37489,
        COMPRESSED_RG11_EAC: 37490,
        COMPRESSED_SIGNED_RG11_EAC: 37491,
        COMPRESSED_RGB8_ETC2: 37492,
        COMPRESSED_SRGB8_ETC2: 37493,
        COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37494,
        COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37495,
        COMPRESSED_RGBA8_ETC2_EAC: 37496,
        COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 37497,
        TEXTURE_IMMUTABLE_FORMAT: 37167,
        MAX_ELEMENT_INDEX: 36203,
        TEXTURE_IMMUTABLE_LEVELS: 33503,
        MAX_TEXTURE_MAX_ANISOTROPY_EXT: 34047
      })
    }), define("Core/ComponentDatatype", ["./defaultValue", "./defined", "./DeveloperError", "./FeatureDetection",
      "./freezeObject", "./WebGLConstants"
    ], function(e, t, r, n, a, i) {
      "use strict";
      if (!n.supportsTypedArrays()) return {};
      var o = {
        BYTE: i.BYTE,
        UNSIGNED_BYTE: i.UNSIGNED_BYTE,
        SHORT: i.SHORT,
        UNSIGNED_SHORT: i.UNSIGNED_SHORT,
        INT: i.INT,
        UNSIGNED_INT: i.UNSIGNED_INT,
        FLOAT: i.FLOAT,
        DOUBLE: i.DOUBLE
      };
      return o.getSizeInBytes = function(e) {
        switch (e) {
          case o.BYTE:
            return Int8Array.BYTES_PER_ELEMENT;
          case o.UNSIGNED_BYTE:
            return Uint8Array.BYTES_PER_ELEMENT;
          case o.SHORT:
            return Int16Array.BYTES_PER_ELEMENT;
          case o.UNSIGNED_SHORT:
            return Uint16Array.BYTES_PER_ELEMENT;
          case o.INT:
            return Int32Array.BYTES_PER_ELEMENT;
          case o.UNSIGNED_INT:
            return Uint32Array.BYTES_PER_ELEMENT;
          case o.FLOAT:
            return Float32Array.BYTES_PER_ELEMENT;
          case o.DOUBLE:
            return Float64Array.BYTES_PER_ELEMENT
        }
      }, o.fromTypedArray = function(e) {
        return e instanceof Int8Array ? o.BYTE : e instanceof Uint8Array ? o.UNSIGNED_BYTE :
          e instanceof Int16Array ? o.SHORT : e instanceof Uint16Array ? o.UNSIGNED_SHORT :
          e instanceof Int32Array ? o.INT : e instanceof Uint32Array ? o.UNSIGNED_INT : e instanceof Float32Array ?
          o.FLOAT : e instanceof Float64Array ? o.DOUBLE : void 0
      }, o.validate = function(e) {
        return t(e) && (e === o.BYTE || e === o.UNSIGNED_BYTE || e === o.SHORT || e === o.UNSIGNED_SHORT || e === o
          .INT || e === o.UNSIGNED_INT || e === o.FLOAT || e === o.DOUBLE)
      }, o.createTypedArray = function(e, t) {
        switch (e) {
          case o.BYTE:
            return new Int8Array(t);
          case o.UNSIGNED_BYTE:
            return new Uint8Array(t);
          case o.SHORT:
            return new Int16Array(t);
          case o.UNSIGNED_SHORT:
            return new Uint16Array(t);
          case o.INT:
            return new Int32Array(t);
          case o.UNSIGNED_INT:
            return new Uint32Array(t);
          case o.FLOAT:
            return new Float32Array(t);
          case o.DOUBLE:
            return new Float64Array(t)
        }
      }, o.createArrayBufferView = function(t, r, n, a) {
        switch (n = e(n, 0), a = e(a, (r.byteLength - n) / o.getSizeInBytes(t)), t) {
          case o.BYTE:
            return new Int8Array(r, n, a);
          case o.UNSIGNED_BYTE:
            return new Uint8Array(r, n, a);
          case o.SHORT:
            return new Int16Array(r, n, a);
          case o.UNSIGNED_SHORT:
            return new Uint16Array(r, n, a);
          case o.INT:
            return new Int32Array(r, n, a);
          case o.UNSIGNED_INT:
            return new Uint32Array(r, n, a);
          case o.FLOAT:
            return new Float32Array(r, n, a);
          case o.DOUBLE:
            return new Float64Array(r, n, a)
        }
      }, o.fromName = function(e) {
        switch (e) {
          case "BYTE":
            return o.BYTE;
          case "UNSIGNED_BYTE":
            return o.UNSIGNED_BYTE;
          case "SHORT":
            return o.SHORT;
          case "UNSIGNED_SHORT":
            return o.UNSIGNED_SHORT;
          case "INT":
            return o.INT;
          case "UNSIGNED_INT":
            return o.UNSIGNED_INT;
          case "FLOAT":
            return o.FLOAT;
          case "DOUBLE":
            return o.DOUBLE
        }
      }, a(o)
    }), define("Core/TerrainQuantization", ["./freezeObject"], function(e) {
      "use strict";
      return e({
        NONE: 0,
        BITS12: 1
      })
    }), define("Core/TerrainEncoding", ["./AttributeCompression", "./Cartesian2", "./Cartesian3", "./ComponentDatatype",
      "./defaultValue", "./defined", "./Math", "./Matrix4", "./TerrainQuantization"
    ], function(e, t, r, n, a, i, o, u, s) {
      "use strict";

      function c(e, t, n, o, c, d) {
        var p, _, y, T;
        if (i(e) && i(t) && i(n) && i(o)) {
          var R = e.minimum,
            A = e.maximum,
            S = r.subtract(A, R, f),
            v = n - t;
          p = Math.max(r.maximumComponent(S), v) < E - 1 ? s.BITS12 : s.NONE, _ = e.center, y = u
            .inverseTransformation(o, new u);
          var g = r.negate(R, l);
          u.multiply(u.fromTranslation(g, h), y, y);
          var M = l;
          M.x = 1 / S.x, M.y = 1 / S.y, M.z = 1 / S.z, u.multiply(u.fromScale(M, h), y, y), T = u.clone(o), u
            .setTranslation(T, r.ZERO, T), o = u.clone(o, new u);
          var N = u.fromTranslation(R, h),
            O = u.fromScale(S, m),
            I = u.multiply(N, O, h);
          u.multiply(o, I, o), u.multiply(T, I, T)
        }
        this.quantization = p, this.minimumHeight = t, this.maximumHeight = n, this.center = _, this.toScaledENU = y,
          this.fromScaledENU = o, this.matrix = T, this.hasVertexNormals = c, this.hasWebMercatorT = a(d, !1)
      }
      var l = new r,
        f = new r,
        d = new t,
        h = new u,
        m = new u,
        E = Math.pow(2, 12);
      c.prototype.encode = function(n, a, i, c, f, h, m) {
        var E = c.x,
          p = c.y;
        if (this.quantization === s.BITS12) {
          i = u.multiplyByPoint(this.toScaledENU, i, l), i.x = o.clamp(i.x, 0, 1), i.y = o.clamp(i.y, 0, 1), i.z = o
            .clamp(i.z, 0, 1);
          var _ = this.maximumHeight - this.minimumHeight,
            y = o.clamp((f - this.minimumHeight) / _, 0, 1);
          t.fromElements(i.x, i.y, d);
          var T = e.compressTextureCoordinates(d);
          t.fromElements(i.z, y, d);
          var R = e.compressTextureCoordinates(d);
          t.fromElements(E, p, d);
          var A = e.compressTextureCoordinates(d);
          if (n[a++] = T, n[a++] = R, n[a++] = A, this.hasWebMercatorT) {
            t.fromElements(m, 0, d);
            var S = e.compressTextureCoordinates(d);
            n[a++] = S
          }
        } else r.subtract(i, this.center, l), n[a++] = l.x, n[a++] = l.y, n[a++] = l.z, n[a++] = f, n[a++] = E, n[
          a++] = p, this.hasWebMercatorT && (n[a++] = m);
        return this.hasVertexNormals && (n[a++] = e.octPackFloat(h)), a
      }, c.prototype.decodePosition = function(t, n, a) {
        if (i(a) || (a = new r), n *= this.getStride(), this.quantization === s.BITS12) {
          var o = e.decompressTextureCoordinates(t[n], d);
          a.x = o.x, a.y = o.y;
          var c = e.decompressTextureCoordinates(t[n + 1], d);
          return a.z = c.x, u.multiplyByPoint(this.fromScaledENU, a, a)
        }
        return a.x = t[n], a.y = t[n + 1], a.z = t[n + 2], r.add(a, this.center, a)
      }, c.prototype.decodeTextureCoordinates = function(r, n, a) {
        return i(a) || (a = new t), n *= this.getStride(), this.quantization === s.BITS12 ? e
          .decompressTextureCoordinates(r[n + 2], a) : t.fromElements(r[n + 4], r[n + 5], a)
      }, c.prototype.decodeHeight = function(t, r) {
        if (r *= this.getStride(), this.quantization === s.BITS12) {
          return e.decompressTextureCoordinates(t[r + 1], d).y * (this.maximumHeight - this.minimumHeight) + this
            .minimumHeight
        }
        return t[r + 3]
      }, c.prototype.getOctEncodedNormal = function(e, r, n) {
        r = (r + 1) * this.getStride() - 1;
        var a = e[r] / 256,
          i = Math.floor(a),
          o = 256 * (a - i);
        return t.fromElements(i, o, n)
      }, c.prototype.getStride = function() {
        var e;
        switch (this.quantization) {
          case s.BITS12:
            e = 3;
            break;
          default:
            e = 6
        }
        return this.hasWebMercatorT && ++e, this.hasVertexNormals && ++e, e
      };
      var p = {
          position3DAndHeight: 0,
          textureCoordAndEncodedNormals: 1
        },
        _ = {
          compressed0: 0,
          compressed1: 1
        };
      return c.prototype.getAttributes = function(e) {
        var t, r = n.FLOAT,
          a = n.getSizeInBytes(r);
        if (this.quantization === s.NONE) {
          var i = 2;
          return this.hasWebMercatorT && ++i, this.hasVertexNormals && ++i, t = (4 + i) * a, [{
            index: p.position3DAndHeight,
            vertexBuffer: e,
            componentDatatype: r,
            componentsPerAttribute: 4,
            offsetInBytes: 0,
            strideInBytes: t
          }, {
            index: p.textureCoordAndEncodedNormals,
            vertexBuffer: e,
            componentDatatype: r,
            componentsPerAttribute: i,
            offsetInBytes: 4 * a,
            strideInBytes: t
          }]
        }
        var o = 3,
          u = 0;
        return (this.hasWebMercatorT || this.hasVertexNormals) && ++o, this.hasWebMercatorT && this
          .hasVertexNormals ? (++u, t = (o + u) * a, [{
            index: _.compressed0,
            vertexBuffer: e,
            componentDatatype: r,
            componentsPerAttribute: o,
            offsetInBytes: 0,
            strideInBytes: t
          }, {
            index: _.compressed1,
            vertexBuffer: e,
            componentDatatype: r,
            componentsPerAttribute: u,
            offsetInBytes: o * a,
            strideInBytes: t
          }]) : [{
            index: _.compressed0,
            vertexBuffer: e,
            componentDatatype: r,
            componentsPerAttribute: o
          }]
      }, c.prototype.getAttributeLocations = function() {
        return this.quantization === s.NONE ? p : _
      }, c.clone = function(e, t) {
        return i(t) || (t = new c), t.quantization = e.quantization, t.minimumHeight = e.minimumHeight, t
          .maximumHeight = e.maximumHeight, t.center = r.clone(e.center), t.toScaledENU = u.clone(e.toScaledENU), t
          .fromScaledENU = u.clone(e.fromScaledENU), t.matrix = u.clone(e.matrix), t.hasVertexNormals = e
          .hasVertexNormals, t.hasWebMercatorT = e.hasWebMercatorT, t
      }, c
    }), define("Core/WebMercatorProjection", ["./Cartesian3", "./Cartographic", "./defaultValue", "./defined",
      "./defineProperties", "./DeveloperError", "./Ellipsoid", "./Math"
    ], function(e, t, r, n, a, i, o, u) {
      "use strict";

      function s(e) {
        this._ellipsoid = r(e, o.WGS84), this._semimajorAxis = this._ellipsoid.maximumRadius, this
          ._oneOverSemimajorAxis = 1 / this._semimajorAxis
      }
      return a(s.prototype, {
        ellipsoid: {
          get: function() {
            return this._ellipsoid
          }
        }
      }), s.mercatorAngleToGeodeticLatitude = function(e) {
        return u.PI_OVER_TWO - 2 * Math.atan(Math.exp(-e))
      }, s.geodeticLatitudeToMercatorAngle = function(e) {
        e > s.MaximumLatitude ? e = s.MaximumLatitude : e < -s.MaximumLatitude && (e = -s.MaximumLatitude);
        var t = Math.sin(e);
        return .5 * Math.log((1 + t) / (1 - t))
      }, s.MaximumLatitude = s.mercatorAngleToGeodeticLatitude(Math.PI), s.prototype.project = function(t, r) {
        var a = this._semimajorAxis,
          i = t.longitude * a,
          o = s.geodeticLatitudeToMercatorAngle(t.latitude) * a,
          u = t.height;
        return n(r) ? (r.x = i, r.y = o, r.z = u, r) : new e(i, o, u)
      }, s.prototype.unproject = function(e, r) {
        var a = this._oneOverSemimajorAxis,
          i = e.x * a,
          o = s.mercatorAngleToGeodeticLatitude(e.y * a),
          u = e.z;
        return n(r) ? (r.longitude = i, r.latitude = o, r.height = u, r) : new t(i, o, u)
      }, s
    }), define("Core/HeightmapTessellator", ["./AxisAlignedBoundingBox", "./BoundingSphere", "./Cartesian2",
      "./Cartesian3", "./defaultValue", "./defined", "./DeveloperError", "./Ellipsoid", "./EllipsoidalOccluder",
      "./freezeObject", "./Math", "./Matrix4", "./OrientedBoundingBox", "./Rectangle", "./TerrainEncoding",
      "./Transforms", "./WebMercatorProjection"
    ], function(e, t, r, n, a, i, o, u, s, c, l, f, d, h, m, E, p) {
      "use strict";
      var _ = {};
      _.DEFAULT_STRUCTURE = c({
        heightScale: 1,
        heightOffset: 0,
        elementsPerHeight: 1,
        stride: 1,
        elementMultiplier: 256,
        isBigEndian: !1
      });
      var y = new n,
        T = new f,
        R = new n,
        A = new n;
      return _.computeVertices = function(o) {
        var c, S, v, g, M = Math.cos,
          N = Math.sin,
          O = Math.sqrt,
          I = Math.atan,
          w = Math.exp,
          C = l.PI_OVER_TWO,
          x = l.toRadians,
          P = o.heightmap,
          U = o.width,
          D = o.height,
          L = o.skirtHeight,
          F = a(o.isGeographic, !0),
          b = a(o.ellipsoid, u.WGS84),
          B = 1 / b.maximumRadius,
          z = o.nativeRectangle,
          q = o.rectangle;
        i(q) ? (c = q.west, S = q.south, v = q.east, g = q.north) : F ? (c = x(z.west), S = x(z.south), v = x(z
          .east), g = x(z.north)) : (c = z.west * B, S = C - 2 * I(w(-z.south * B)), v = z.east * B, g = C - 2 *
          I(w(-z.north * B)));
        var G = o.relativeToCenter,
          V = i(G);
        G = V ? G : n.ZERO;
        var W = a(o.exaggeration, 1),
          X = a(o.includeWebMercatorT, !1),
          H = a(o.structure, _.DEFAULT_STRUCTURE),
          k = a(H.heightScale, _.DEFAULT_STRUCTURE.heightScale),
          Y = a(H.heightOffset, _.DEFAULT_STRUCTURE.heightOffset),
          j = a(H.elementsPerHeight, _.DEFAULT_STRUCTURE.elementsPerHeight),
          Z = a(H.stride, _.DEFAULT_STRUCTURE.stride),
          K = a(H.elementMultiplier, _.DEFAULT_STRUCTURE.elementMultiplier),
          J = a(H.isBigEndian, _.DEFAULT_STRUCTURE.isBigEndian),
          Q = h.computeWidth(z),
          $ = h.computeHeight(z),
          ee = Q / (U - 1),
          te = $ / (D - 1);
        F || (Q *= B, $ *= B);
        var re, ne, ae = b.radiiSquared,
          ie = ae.x,
          oe = ae.y,
          ue = ae.z,
          se = 65536,
          ce = -65536,
          le = E.eastNorthUpToFixedFrame(G, b),
          fe = f.inverseTransformation(le, T);
        X && (re = p.geodeticLatitudeToMercatorAngle(S), ne = 1 / (p.geodeticLatitudeToMercatorAngle(g) - re));
        var de = R;
        de.x = Number.POSITIVE_INFINITY, de.y = Number.POSITIVE_INFINITY, de.z = Number.POSITIVE_INFINITY;
        var he = A;
        he.x = Number.NEGATIVE_INFINITY, he.y = Number.NEGATIVE_INFINITY, he.z = Number.NEGATIVE_INFINITY;
        var me = Number.POSITIVE_INFINITY,
          Ee = U + (L > 0 ? 2 : 0),
          pe = D + (L > 0 ? 2 : 0),
          _e = Ee * pe,
          ye = new Array(_e),
          Te = new Array(_e),
          Re = new Array(_e),
          Ae = X ? new Array(_e) : [],
          Se = 0,
          ve = D,
          ge = 0,
          Me = U;
        L > 0 && (--Se, ++ve, --ge, ++Me);
        for (var Ne = 0, Oe = Se; Oe < ve; ++Oe) {
          var Ie = Oe;
          Ie < 0 && (Ie = 0), Ie >= D && (Ie = D - 1);
          var we = z.north - te * Ie;
          we = F ? x(we) : C - 2 * I(w(-we * B));
          var Ce = M(we),
            xe = N(we),
            Pe = ue * xe,
            Ue = (we - S) / (g - S);
          Ue = l.clamp(Ue, 0, 1);
          var De;
          X && (De = (p.geodeticLatitudeToMercatorAngle(we) - re) * ne);
          for (var Le = ge; Le < Me; ++Le) {
            var Fe = Le;
            Fe < 0 && (Fe = 0), Fe >= U && (Fe = U - 1);
            var be = z.west + ee * Fe;
            F ? be = x(be) : be *= B;
            var Be, ze = Ie * (U * Z) + Fe * Z;
            if (1 === j) Be = P[ze];
            else {
              Be = 0;
              var qe;
              if (J)
                for (qe = 0; qe < j; ++qe) Be = Be * K + P[ze + qe];
              else
                for (qe = j - 1; qe >= 0; --qe) Be = Be * K + P[ze + qe]
            }
            Be = (Be * k + Y) * W;
            var Ge = (be - c) / (v - c);
            if (Ge = l.clamp(Ge, 0, 1), Re[Ne] = new r(Ge, Ue), ce = Math.max(ce, Be), se = Math.min(se, Be), Le !==
              Fe || Oe !== Ie) {
              Le < 0 ? be -= 1e-5 * Q : be += 1e-5 * Q, Oe < 0 ? we += 1e-5 * $ : we -= 1e-5 * $, Ce = M(we), xe =
                N(we), Pe = ue * xe, Be -= L
            }
            var Ve = Ce * M(be),
              We = Ce * N(be),
              Xe = ie * Ve,
              He = oe * We,
              ke = O(Xe * Ve + He * We + Pe * xe),
              Ye = 1 / ke,
              je = Xe * Ye,
              Ze = He * Ye,
              Ke = Pe * Ye,
              Je = new n;
            Je.x = je + Ve * Be, Je.y = Ze + We * Be, Je.z = Ke + xe * Be, ye[Ne] = Je, Te[Ne] = Be, X && (Ae[Ne] =
              De), Ne++, f.multiplyByPoint(fe, Je, y), n.minimumByComponent(y, de, de), n.maximumByComponent(y,
              he, he), me = Math.min(me, Be)
          }
        }
        var Qe, $e = t.fromPoints(ye);
        i(q) && q.width < l.PI_OVER_TWO + l.EPSILON5 && (Qe = d.fromRectangle(q, se, ce, b));
        var et;
        if (V) {
          et = new s(b).computeHorizonCullingPoint(G, ye)
        }
        for (var tt = new e(de, he, G), rt = new m(tt, me, ce, le, !1, X), nt = new Float32Array(_e * rt
          .getStride()), at = 0, it = 0; it < _e; ++it) at = rt.encode(nt, at, ye[it], Re[it], Te[it], void 0, Ae[
          it]);
        return {
          vertices: nt,
          maximumHeight: ce,
          minimumHeight: se,
          encoding: rt,
          boundingSphere3D: $e,
          orientedBoundingBox: Qe,
          occludeePointInScaledSpace: et
        }
      }, _
    }), define("Core/formatError", ["./defined"], function(e) {
      "use strict";

      function t(t) {
        var r, n = t.name,
          a = t.message;
        r = e(n) && e(a) ? n + ": " + a : t.toString();
        var i = t.stack;
        return e(i) && (r += "\n" + i), r
      }
      return t
    }), define("Workers/createTaskProcessorWorker", ["../Core/defaultValue", "../Core/defined", "../Core/formatError"],
      function(e, t, r) {
        "use strict";

        function n(n) {
          var a, i = [],
            o = {
              id: void 0,
              result: void 0,
              error: void 0
            };
          return function(u) {
            var s = u.data;
            i.length = 0, o.id = s.id, o.error = void 0, o.result = void 0;
            try {
              o.result = n(s.parameters, i)
            } catch (e) {
              e instanceof Error ? o.error = {
                name: e.name,
                message: e.message,
                stack: e.stack
              } : o.error = e
            }
            t(a) || (a = e(self.webkitPostMessage, self.postMessage)), s.canTransferArrayBuffer || (i.length = 0);
            try {
              a(o, i)
            } catch (e) {
              o.result = void 0, o.error = "postMessage failed with error: " + r(e) + "\n  with responseMessage: " +
                JSON.stringify(o), a(o)
            }
          }
        }
        return n
      }), define("Workers/createVerticesFromHeightmap", ["../Core/Ellipsoid", "../Core/HeightmapTessellator",
      "../Core/Rectangle", "./createTaskProcessorWorker"
    ], function(e, t, r, n) {
      "use strict";

      function a(n, a) {
        var i = n.width,
          o = n.height;
        n.skirtHeight > 0 && (i += 2, o += 2), n.ellipsoid = e.clone(n.ellipsoid), n.rectangle = r.clone(n.rectangle);
        var u = t.computeVertices(n),
          s = u.vertices;
        return a.push(s.buffer), {
          vertices: s.buffer,
          numberOfAttributes: u.encoding.getStride(),
          minimumHeight: u.minimumHeight,
          maximumHeight: u.maximumHeight,
          gridWidth: i,
          gridHeight: o,
          boundingSphere3D: u.boundingSphere3D,
          orientedBoundingBox: u.orientedBoundingBox,
          occludeePointInScaledSpace: u.occludeePointInScaledSpace,
          encoding: u.encoding
        }
      }
      return n(a)
    })
}();
